О чём речь: вывод содержания.
Пока мы работали над выводом информации в блок и над страницей настроек модуля. Сейчас у нас в блоке выводятся ссылки на все доступные документы. Однако было бы удобнее указать некоторое максимальное количество ссылок в блоке и ещё помимо этого, после этих ссылок добавить ссылку, которая вела бы на документ в котором находится полный список ссылок. Поэтому, давайте сделаем документ, в котором будут выводится все наши ссылки на содержание созданное неделю назад.
<?php
function onthisdate_all() {
}
?>Мы будет использовать большую часть кода из функции, которая выводит ссылки в блок. Хорошо, давайте назовём такой стиль ExtremeProgramming и сделаем копию существующего кода. Если нам нужно будет использовать этот код ещё и в третьем месте, то тогда уж мы вынесем его в отдельную функцию. А пока, скопируйте код в новую функцию onthisdate_all(). All в этом решении — это не hook Друпала.
Если вы предполагаете вызов этой функции из другого модуля, используйте стандартные правила именования, мы использовали modulename_action. Вызовы могут быть связаны с использованием функции module_invoke. Если вы хотите оставить эту функцию локальной (например, это вспомогательная функция в вашем модуле) и использовать её только для вашего модуля, используйте в качестве префикса к названию функции знак подчёркивания (не добавляя перед знаком подчёркивания названия модуля). Но мы это делать не будем.
<?php
function onthisdate_all() {
// content variable that will be returned for display
$page_content = '';
// Get today's date
$today = getdate();
// calculate midnight one week ago
$start_time = mktime(0, 0, 0, $today['mon'], ($today['mday'] - 7), $today['year']);
// we want items that occur only on the day in question,
// so calculate 1 day
$end_time = $start_time + 86400;
// 60 * 60 * 24 = 86400 seconds in a day
$query = "SELECT nid, title, created FROM " .
"{node} WHERE created >= '%d' " .
" AND created <= '%d'";
// get the links (no range limit here)
$queryResult = db_query($query, $start_time, $end_time);
while ($links = db_fetch_object($queryResult)) {
$page_content .= l($links->title, 'node/'.$links->nid).'<br />';
}
...
}
?>В этой точке у нас есть содержание документа. Как было сказано ранее, мы включили в наш код форматирование оформления. Это плохо, и по-хорошему от этого нужно избавляться. Но это не тема нашего сегодняшнего руководства, поэтому, мы всё-таки используем форматирование в нашем коде.
Остальная часть нашей функции проверяет наличие доступных документов и если таковых не имеется, то позволяет сообщить пользователю про их отсутствие. Т.к. открытие пустого документа может привести пользователя в замешательство.
Отметьте: мы только находим документы и Друпал выводит ссылки на них в наш новый документ.
<?php
function onthisdate_all() {
...
// check to see if there was any content before
// setting up the block
if ($page_content == '') {
// no content from a week ago, let the user know
$page_content = "No events occurred on this site on this date in history.";
}
return $page_content;
}
?>Даже при том, что мы уже имеем функцию которая выводит ссылки на документы созданные неделю назад, мы не определили URL документа в котором будут выводиться эти ссылки. Давайте этим и займёмся в следующей главе.
Comments
Post new comment