Задача
По определённому адресу вывести список тегов, а так же число материалов помеченных каждым тегом:
Решение
В папке site/all/modules создаём новую папку taglist, и уже в ней создаём файл taglist.info с содержимым:
name = Tag List
description = Page with a list of tags
version = 6.x-1.0
core = 6.x
Подробнее про файлы с расширением .info можно почитать в прошлых уроках.
В этой же папке создаём файл taglist.module с содержимым:
<?php
/**
* @file
* Tag List
*/
Весь php код будет добавляться в конец этого файла.
С помощью хука hook_menu() регистрируем адрес, по которому будет выводится список тегов — в taglist.module добавляем:
/**
* Реализация hook_menu()
*/
function taglist_menu() {
$items['tags'] = array(
'title' => 'Список тегов', // заголовок страницы
'page callback' => 'taglist_page_tags', // функция, которая будет генерировать контент страницы (список тегов)
'access arguments' => array('access content'), // страницу смогут читать пользователи с правами на чтение нод
);
return $items;
}
В функции taglist_page_tags() генерируем список:
/**
* Menu callback
*/
function taglist_page_tags() {
$vid = 1; // номер словаря, посмотреть можно на странице admin/content/taxonomy/list
$items = array();
$page = '';
$terms = db_query("
SELECT tid, name, (
SELECT COUNT(*) FROM {term_node} tn
LEFT JOIN {node} n ON tn.nid = n.nid
WHERE tn.tid = td.tid AND n.status = 1
) node_count FROM {term_data} td
WHERE vid = %d
ORDER BY name
", $vid);
while ($term = db_fetch_array($terms)) {
$items[] = l($term['name'], 'taxonomy/term/' . $term['tid']) . ' (' . $term['node_count'] . ')';
}
$page .= theme('item_list', $items, 'Список тегов', 'ul');
return $page;
}
Включаем модуль Tag List на странице управления модулями (admin/build/menu).
Всё. Теперь по адресу http://yoursite.ru/tags будет открываться страница со списком тегов (терминов) из словаря $vid.
Написанное актуально для
Drupal 6.x