Как внедрить сезонные логотипы в Drupal? - PullRequest
1 голос
/ 25 августа 2009

Я знаю, что это, вероятно, можно сделать с помощью CCK и вида, и, возможно, типа содержимого логотипа. Но мне было интересно, знает ли кто-нибудь о ЛУЧШЕМ способе сделать следующее (возможно, есть модуль, который уже делает это):

Я хочу СЕЗОННЫЕ показы моего логотипа. То есть Если я создаю РОЖДЕСТВЕНСКУЮ версию своего логотипа, например, с логотипом новогодней шапки, это должно быть показано на Рождество или за 7 дней до Рождества. Эти 7 дней должны меняться на основе ЛОГОТИПА. То есть Я мог бы показать рождественский логотип на весь декабрь, а на Хэллоуин - только на один день.

Он должен автоматически выбирать между различными логотипами и ТАКЖЕ, обслуживать ЯЗЫКИ. У меня есть три языка и, следовательно, три разных логотипа на моем сайте.

Ответы [ 4 ]

3 голосов
/ 25 августа 2009

Недостатком является наличие типа контента для логотипов, так как вам потребуется выполнить две загрузки узла для каждой страницы.

Альтернативным решением было бы реализовать модуль, который создал блок логотипа. Затем вы можете настроить свою тему, чтобы иметь регион, в котором находится логотип, и поместить этот блок в регион. Вы можете иметь любую логику, которую хотите в блоке. Включая интерфейс администратора, если вы этого хотите. Это может быть кэшировано для каждого пользователя (и очищаться один раз в день), поэтому накладные расходы будут просто загружать блок из кэша, а не загружать узел Это также позволяет отделить презентацию от логики, и я могу предположить, что сезонный модуль изображения будет весьма популярен.

1 голос
/ 07 ноября 2009

Это было простое, но эффективное решение с использованием cck и views:

Создайте тип контента «фото заголовка». Добавьте поля для изображений, URL и списка выбора «когда показывать».

Изображения Я использовал загрузку изображений с помощью модуля обрезки, ограниченный шириной 400px и высотой 100px для размещения в блоке заголовка.

«покажи» выберите список, в котором я заполнил лето, зиму, осень, Хэллоуин, Рождество, День ветеранов и т. Д.

URL является необязательным.

В поле зрения выберите по типу = header_pic и show_when = все, что вы хотите отобразить сейчас, предел = 1.

Нужно аддон модуля PHP Customfield для представлений и добавить:

<?php
$temp = node_load($data->nid);
if ($data->node_data_field_header_pic_url_field_header_pic_url_url) { 
    echo '<a href="' . $data->node_data_field_header_pic_url_field_header_pic_url_url 
. '" title="' . $data->node_data_field_header_pic_url_field_header_pic_url_title 
.'"><img src="/' . $temp->field_header_image[0]['filepath'] . '" /></a>';
} 
else { 
    echo '<img src="/' . $temp->field_header_image[0]['filepath'] . '" />';
}
?>

Где поля, которые я отметил, соотносятся с вашими фактическими полями.

Для этого нужно обернуть изображение этим полем url, только если поле url заполнено.

Затем установите представление в отображении блока и установите этот блок в области заголовка. В зависимости от темы, вам может понадобиться немного взломать page.tpl.php, чтобы переместить эту область блока заголовка в область реального заголовка (но как только вы туда попадете, легко увидеть, что вам нужно сделать).

Вы можете даже сделать просмотр страницы этого же представления, чтобы одновременно отображать все ваши великолепные изображения заголовков на странице (/ headerpics) со ссылкой на редактирование каждой из них для удобства управления.

Это будет работать, если вы просто хотите сезонные изображения. Это простая форма для нетехнических пользователей для загрузки и обрезки изображений. Единственная потребность администратора - случайные изменения сезона (показывать когда) в фильтре представления.

1 голос
/ 26 августа 2009

Просто используйте немного сырой php ...

Если ваш сайт использует нормальную структуру URL для языков, вы делаете что-то вроде этого:

<?php
$path = drupal_get_path_alias($_GET['q']);
$path = explode('/', $path);
if ($path[0] == 'english') {
  $logolangclass = 'english';
};
?>

Затем некоторые обычные функции date (), которые вы могли бы сделать примерно так:

<?php 
$today = date("md");
if ($today == "1215") {
  $logoseasonclass = "christmas";
}
?>

Затем используйте эти две переменные для создания класса css для вашего логотипа:

<div id="MyLogo" class="<?php echo $logolangclass $logoseasonclass ?>"></div>

Который при рендеринге будет производить что-то вроде этого:

<div id="MyLogo" class="english christmas"></div>
1 голос
/ 25 августа 2009

Если бы это был набор очень простых правил, я бы просто сделал это на странице шаблона (если это декабрь, включите этот логотип, если не включите этот другой логотип и т. Д.).

Если вы хотите, чтобы это было полностью настраиваемым, то я бы сделал небольшой модуль и, возможно, тип контента CCK с логотипом, с диапазонами изображений и дат, чтобы он выбирал изображения в соответствии с вашими правилами. Затем модуль экспортирует блок для размещения в одном из регионов, скажем, в заголовке. Это также будет с учетом языка.

Я думаю, что представления может быть недостаточно, чтобы сделать все целиком, оно должно быть немного сложным ...

...