В прошлом мы создали модуль выводящий некоторую информацию в блок, модуль получился крайне сырой, давайте его улучшим.
Названия хуков ссылаются на описание в api.drupal.ru, если увидели название, кликните, и прочитайте инфу по хуку, без этого понять урок будет затруднительно.
Перво наперво, нужно загнать блок в кеш, и сделать обновление по cron'у. За работу с cron'ом отвечает hook . Обработку данных для удобства засунем в отдельную функцию, которую назовем seoblock_data.
function seoblock_cron() {
seoblock_data();
}функция предельно проста, при запуске крона, она вызывает функцию seoblock_data();
function seoblock_data() {
if(!$cash = cache_get('seoblock')) {
$result='';
$tic= variable_get('tic', false);
$alexa= variable_get('alexa', false);
$pr= variable_get('pr', false);
if ($tic or $alexa or $pr) {
if ($tic) $result .= 'Яндекс.Тиц: '.cy(variable_get('sitename', false)).'<br>';
if ($alexa) $result .= 'Alexa rank: '.alexa(variable_get('sitename', false)).'<br>';
if ($pr) $result .= 'Google.PR: '.getPageRank(variable_get('sitename', false));
}
$output=$result;
cache_set("seoblock", $output, 'cache', time() + 36000);
} else {
$output = $cash->data;
}
return $output;
}Тут все интереснее. Вначале мы проверяем есть ли сохранненый кеш
if(!$cash = cache_get('seoblock'))и если есть, то помещаем его в переменную $cash. Если же кеша нет, то происходит запрос инфы
$result='';
$tic= variable_get('tic', false);
$alexa= variable_get('alexa', false);
$pr= variable_get('pr', false);
if ($tic or $alexa or $pr) {
if ($tic) $result .= 'Яндекс.Тиц: '.cy(variable_get('sitename', false)).'<br>';
if ($alexa) $result .= 'Alexa rank: '.alexa(variable_get('sitename', false)).'<br>';
if ($pr) $result .= 'Google.PR: '.getPageRank(variable_get('sitename', false));
}и помещение информации в кеш на 10 часов (параметры сайта обновляются не часто)
cache_set("seoblock", $output, 'cache', time() + 36000);функция
function seoblock_block($op='list', $delta=0) {
if ($op == "list") {
$block = array();
$block[0]["info"] = t('seoblock');
return $block;
}
else if ($op == 'view') {
switch ($delta) {
case 0:
$block['content'] = seoblock_data();
$block['subject'] = 'seoblock';
break;
}
return $block;
}
} // end seoblock_blockСледующая задача — отделить дизайн, и выкинуть его в отдельный tpl.php файл. Для этого используется hook
function seoblock_theme() {
return array(
'seoblock' => array(
'arguments' => array('tic' => $tic, 'alexa' => $alexa, 'pr' => $pr),
'template' => 'seoblock',
),
);
} // end seoblock_themeв данном случае мы передаем функции 3 аргумента, и задаем файл темизации
'template' => 'seoblock',tpl.php к названию, за нас добавит drupal. Если бы данной строки не было, то пришлось добавить функцию тимизации «theme_seoblock».
В связи с разделением кода и дизайна, изменилась функция seoblock_data
function seoblock_data() {
if(!$cash = cache_get('seoblock')) {
$result='';
$tic= variable_get('tic', false);
$alexa= variable_get('alexa', false);
$pr= variable_get('pr', false);
if ($tic or $alexa or $pr) {
if (variable_get('tic', false)) $tic = cy(variable_get('sitename', false));
if (variable_get('alexa', false)) $alexa = alexa(variable_get('sitename', false));
if (variable_get('pr', false)) $pr = getPageRank(variable_get('sitename', false));
}
$output=theme('seoblock', $tic, $alexa, $pr);
cache_set("seoblock", $output, 'cache', time() + 3600);
} else {
$output = $cash->data;
}
return $output;
}появился вызов
theme('seoblock', $tic, $alexa, $pr);файл seoblock.tpl.php
<?php
// $Id;
?>
<?php if ($tic): ?>
Яндекс.Тиц: <?php print $tic ?><br>
<?php endif; ?>
<?php if ($alexa): ?>
Alexa rank: <?php print $alexa ?><br>
<?php endif; ?>
<?php if ($pr): ?>
Google.PR: <?php print $pr ?><br>
<?php endif; ?>Урок получился небольшой, но надеюсь познавательный, оставайтесь на связи -)
- RemaGe's blog
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии



Комментарии
Довольно непросто писать
By Максим (не проверено) on 29 Апр 2010 at about 13:49.Довольно непросто писать модуль для друпал.
Действительно -)
By RemaGe on 01 Май 2010 at about 11:00.Действительно -)
Звучит как: "Довольно
By An43 (не проверено) on 06 Май 2010 at about 10:38.Звучит как: "Довольно непросто иметь мозг" :)
или как "довольно непросто им
By RemaGe on 06 Май 2010 at about 12:51.или как "довольно непросто им пользоваться" -)
Отличные уроки, автору очень
By Guron (не проверено) on 14 Июн 2010 at about 10:27.Отличные уроки, автору очень большое спасибо.
Так же хорошая ссылка про формы. очень много понятно сразу становится, с каждым днем все больше и больше нравится друпал.
function
By Виктор 78 (не проверено) on 19 Июл 2010 at about 16:10.function <strong>seoblock</strong>_theme() {return array(
'<strong>seoblock</strong>' => array(
'arguments' => array('tic' => $tic, 'alexa' => $alexa, 'pr' => $pr),
'template' => '<strong>seoblock</strong>',
),
);
}
И вызываем theme('seoblock', $tic, $alexa, $pr);
Прокомментируйте пожалуйста, первое seoblock может быть написано как, скажем, seoblocker?
Второе seoblock к чему относится?
НУ а третье - это название темплэйта, это ясно из контекста. АА вот куда пихать этот темплэйт? В папку с темой? В модуль?
Заранее спасибо.
Здравствуйте. Можете показать
By Peter on 28 Июл 2010 at about 17:53.Здравствуйте. Можете показать пример работы с БД (запись, чтение) для модуля Drupal. Заранее очень благодарен.
Не проработали вы этот урок
By Неизвестный (не проверено) on 28 Авг 2010 at about 21:55.Не проработали вы этот урок вообще. Куда файл с шаблоном пихать, что где означает... ничего не объяснили.
Уроки не самостоятельны, они
By RemaGe on 31 Авг 2010 at about 09:46.Уроки не самостоятельны, они составляют курс, каждый новый урок пишется с оглядкой на прошлые.
Спасибо вам большое за уроки!
By set (не проверено) on 13 Сен 2010 at about 19:40.Спасибо вам большое за уроки! :) очень нравятся :) планируете продолжать?
Незачто, планирую -) 2
By RemaGe on 14 Сен 2010 at about 10:01.Незачто, планирую -)
2 находятся в написании -) Только нехватает времени и желания)
Ну, проблема со временем
By set (не проверено) on 17 Сен 2010 at about 11:26.Ну, проблема со временем общеизвестна и понятно, а что за проблема с желанием? :) мотивации не хватает или кто-то\что-то отбивает это желание?
я вот даже зарегался у вас на
By set on 17 Сен 2010 at about 11:29.я вот даже зарегался у вас на сайте, так мне ваши уроки понравились :)
Большая просьба - для
By set on 17 Сен 2010 at about 16:37.Большая просьба - для скриншотов не используйте жпег... это просто издевательство над глазами... по-возможности, используйте png-24
Помогите, плиз! В функции
By Чаус Константин on 05 Июл 2011 at about 00:51.Помогите, плиз!
В функции seoblock_data
не работает функция theme('seoblock', $tic, $alexa, $pr);
уже пробовал theme('seoblock', "1", "1", "1");
а вот так $output="TEST" выводит соотв. TEST, тоесть не работает именно theme();
функция seoblock_theme() и файл seoblock.tpl.php (в директории модуля) есть.
В чем может быть проблема? Помогите плиз, очень уж хочу разделить функционал от отображения. Заранее спасибо!