Опубликовано Вс, 20/02/2011 - 16:06 пользователем wshurik
Очень часто необходимо иметь на сайте меню (или несколько меню), которые были бы составлены на основе списка словарей таксономии и сохраняли вложенность словаря. И хорошо бы, чтобы они автоматически обновлялись при добавлении/удалении термина в словаре и показывали количество материала с использованием конкретного термина.
Для создания подобного меню можно применить следующий код на php, который нужно просто добавить в новый блок, не забыв установить в нем формат вывода «php». Единственной настройкой получившегося меню будет указание словаря, на основе которого это меню будет составлено.
<?php
$vid = 3; // Номер словаря
$pole = array();
$items = array();
$terms = taxonomy_get_tree($vid);
//var_dump($terms);
foreach ( $terms as $term ) {
$count = db_result(db_query("SELECT COUNT(nid) FROM {term_node} WHERE tid = %d", $term->tid));
$pole[]=Array ((($count) ? l($term->name, "taxonomy/term/$term->tid")." (".$count.")" : $term->name), $term->depth, $count, $term->tid);
}
$depth =-1;
foreach ($pole as $list) {
//$depth- глубина предыдущего уровня
//$list[1] - глубина текущего элемента
if ($list[1] == $depth) {
echo "</li>";
next;
}
while ($list[1] != $depth) {
if ($list[1] > $depth) {
$depth++;
echo "\n<ul>";
next;
}
if ($list[1] < $depth) {
$depth--;
echo "\n</li>\n</ul>";
}
}
echo
"\n<li>$list[0]";
$depth=$list[1];
}
//Закрываем все открытые теги до нулевого уровня:
$depth=0;
while ($list[1] != $depth) {
if ($list[1] > $depth) {
$depth++;
echo "</li>\n</ul>";
}
}
?>