08. Содержание



О чём речь: вывод содержания.


Пока мы работали над выводом информации в блок и над страницей настроек модуля. Сейчас у нас в блоке выводятся ссылки на все доступные документы. Однако было бы удобнее указать некоторое максимальное количество ссылок в блоке и ещё помимо этого, после этих ссылок добавить ссылку, которая вела бы на документ в котором находится полный список ссылок. Поэтому, давайте сделаем документ, в котором будут выводится все наши ссылки на содержание созданное неделю назад.

<?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

Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.