Как внедрить сезонные логотипы в Drupal?

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

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

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


person coderama    schedule 25.08.2009    source источник


Ответы (4)


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

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

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

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

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

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

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

<?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) со ссылкой для редактирования для каждого из них для удобства управления.

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

person Kirk Hings    schedule 06.11.2009
comment
Это на самом деле то, что я в конечном итоге сделал. - person coderama; 10.11.2009

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

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

person Jeremy French    schedule 25.08.2009

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

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

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

person Palantir    schedule 25.08.2009
comment
Ах. Я так и думал. Я собираюсь создать тип контента, а затем просто разместить код и логику прямо на странице. Может быть, извлечь его в отдельный файл. Спасибо Палантир! - person coderama; 25.08.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>
person d3l3t3m3    schedule 25.08.2009
comment
Это будет работать, но сложная часть связана с логикой, которую я хотел, чтобы модуль обрабатывал. т.е. чтобы пользователи, не имеющие знаний в области программирования, добавляли логотипы, и если логотипы перекрываются, выбирается тот, у которого есть приоритет. например если есть рождественский логотип на весь декабрь и один на 10 декабря, то тот, что на 10 декабря, показан 10 декабря, а тот, что на рождество, - на все остальные дни. - person coderama; 26.08.2009