Как да внедрим сезонни лога в Drupal?

Знам, че това вероятно може да се направи с CCK и изглед и може би тип съдържание на лого. Но се чудех дали някой знае НАЙ-ДОБРИЯ начин да направите следното (може би вече има модул, който прави това):

Искам СЕЗОННИ показвания на моето лого. т.е. Ако създам КОЛЕДНА версия на логото си, например с коледна шапка в логото, това трябва да се покаже на Коледа или 7 дни преди Коледа. Тези 7 дни трябва да могат да се променят за ВСЕКИ ЛОГО. т.е. Може би искам да покажа коледното лого за целия декември, но празничните светии само за един ден.

Той трябва автоматично да избира между различните лога и СЪЩО ТО да се грижи за ЕЗИЦИТЕ. Имам три езика и следователно три различни лога на моя сайт.


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


Отговори (4)


Това беше просто, но ефективно решение, използващо cck и изгледи:

Създайте тип съдържание „заглавни снимки“. Добавете полета за изображения, url и списък за избор „покажи кога“.

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

„покажи кога“ изберете списък, който попълних с лято, зима, есен, Хелоуин, Коледа, Ден на ветерана и т.н.

url не е задължителен.

В изглед филтрирайте по тип = header_pic и show_when = каквото искате да се показва сега, limit = 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="/bg' . $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