Создание удобного меню в Drupal на основе списка словаря таксономии
Очень часто необходимо иметь на сайте меню (или несколько меню), которые были бы составлены на основе списка словарей таксономии и сохраняли вложенность словаря. И хорошо бы, чтобы они автоматически обновлялись при добавлении/удалении термина в словаре и показывали количество материала с использованием конкретного термина.
Для создания подобного меню можно применить следующий код на 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 »
«;
next;
}
while ($list[1] != $depth) {
if ($list[1] > $depth) {
$depth++;
echo «\n
- «;
next;
}
if ($list[1] < $depth) {
$depth—;
echo «\n
\n
«;
}
}
echo «\n
$depth=$list[1];
}
//Закрываем все открытые теги до нулевого уровня:
$depth=0;
while ($list[1] != $depth) {
if ($list[1] > $depth) {
$depth++;
echo »
\n
«;
}
}
?>
Ниже показан пример реализации меню с использованием этого кода
Очень часто необходимо иметь на сайте меню (или несколько меню), которые были бы составлены на основе списка словарей таксономии и сохраняли вложенность словаря. И хорошо бы, чтобы они автоматически обновлялись при добавлении/удалении термина в словаре и показывали количество материала с использованием конкретного термина.
Для создания подобного меню можно применить следующий код на 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 «
«;
next;
}
while ($list[1] != $depth) {
if ($list[1] > $depth) {
$depth++;
echo «\n
- «;
next;
}
if ($list[1] < $depth) {
$depth—;
echo «\n\n
«;
}
}
echo «\n
- $list[0]»;
$depth=$list[1];
}
//Закрываем все открытые теги до нулевого уровня:
$depth=0;
while ($list[1] != $depth) {
if ($list[1] > $depth) {
$depth++;
echo «
\n
«;
}
}
?>
Ниже показан пример реализации меню с использованием этого кода