Вывод детей термина таксономии

Главные вкладки

Аватар пользователя Skyler Skyler 19 февраля 2011 в 22:08

Подскажите, есть ли сниппет для вывода дочерних терминов заданного родителя таксономии? Если нет готового решения, то может кто-нибудь подскажет как реализовать подобное? В php не силён, к сожалению...

Комментарии

Аватар пользователя Skyler Skyler 19 февраля 2011 в 22:30

Просто список детей нужно будет выводить в нужных местах сайта, а с помощью вьюс я пока умею создавать только либо блоки, либо целые страницы с адресом...

Аватар пользователя q2_faith q2_faith 19 февраля 2011 в 22:35

"Skyler" wrote:
Просто список детей нужно будет выводить в нужных местах сайта, а с помощью вьюс я пока умею создавать только либо блоки, либо целые страницы с адресом...

поищите про views_embed

Аватар пользователя Обухов Никита Обухов Никита 19 февраля 2011 в 22:41
<?php
$result = db_query('
SELECT td.tid, td.name
FROM {term_hierarchy} th
INNER JOIN {term_data} td
  ON td.tid = th.tid
WHERE th.parent = %d
ORDER BY td.weight ASC, td.name ASC'
, $parent);
$terms = array();
while ($term = db_fetch_object($result)) {
  $terms[] = $term->name;
 // или ссылкой на страницу термина
  $terms[] = l($term->name, 'taxonomy/term/' . $term->tid);
}
print count($terms) ? theme('item_list', $terms) : 'Упс';
Аватар пользователя Skyler Skyler 19 февраля 2011 в 22:47

"Обухов Никита" wrote:

Ещё бы пояснение хотя б на пару слов ) А то я:

"Skyler" wrote:
В php не силён, к сожалению...

Это уже весь сниппет или только часть?

Аватар пользователя Обухов Никита Обухов Никита 19 февраля 2011 в 23:00

Это вывод детей термина $parent (этой переменной нужно присвоить ID нужного термина). Берет только детей конкретного этого термина, без глубины.

Если нужно выводить только названия, то оставьте внутри цикла while только $terms[] = $term->name;
Если нужно выводить названия ссылками на страницу таксономии, оставьте только $terms[] = l($term->name, 'taxonomy/term/' . $term->tid);
Если у выбранного термина есть дети, то они выведутся списком ul li.
Если нет - выведется текст 'Упс'

Аватар пользователя Skyler Skyler 20 февраля 2011 в 3:24

Подскажите, как ещё дополнить модуль, что б в скобках после каждого термина выводилось количество нод? Это реально?

Аватар пользователя Skyler Skyler 20 февраля 2011 в 15:42

"Skyler" wrote:
Подскажите, как ещё дополнить модуль, что б в скобках после каждого термина выводилось количество нод? Это реально?

Ну неужели никто не знает? Подскажите, оч нужно...

Аватар пользователя Обухов Никита Обухов Никита 20 февраля 2011 в 18:02
<?php
$result 
db_query('
SELECT COUNT(tn.nid) AS c, td.tid, td.name
FROM {term_hierarchy} th
INNER JOIN {term_data} td
  ON td.tid = th.tid
LEFT JOIN {term_node} tn
  ON tn.tid = td.tid
LEFT JOIN {node} n 
 ON n.nid = tn.nid
WHERE th.parent = %d AND (n.status <> 0 OR n.status IS NULL)
GROUP BY tn.tid
ORDER BY td.weight ASC, td.name ASC'
$parent);
$terms = array();
while (
$term db_fetch_object($result)) {
  
$terms[] = l($term->name " ({$term->c})"'taxonomy/term/' $term->tid);
}
print 
count($terms) ? theme('item_list'$terms) : 'Упс';?>
Аватар пользователя Skyler Skyler 20 февраля 2011 в 17:06

"q2_faith" wrote:
http://druit.ru/blogs/views/18[/quote]
Полезная статья, но больно уж муторно и громоздко для моей задачки...

"Обухов Никита" wrote:
<?php ?>

Всё работает шикарно!) Спасибо ещё раз!
Понимаю, что уже надоел, но у меня остался последний вопрос: как выводить термины не списком, а просто сплош друг за другом? Потыркался сам, но ничего путного не вышло... Всё дело в item_list?

Аватар пользователя Skyler Skyler 23 февраля 2011 в 2:10

Увы, но вышеприведённый код работает не совсем правильно... Почему-то, с первым по порядку родителем всё в порядке - выводятся все дети, но вот если взять родителя из конца списка терминов или из середины, то выводится только один первый подтермин... Кто знает, в чём может быть проблема?

Аватар пользователя Skyler Skyler 23 февраля 2011 в 2:22

Ничего не понимаю... у одних родителей выводит по одному термину, у других четыре и лишь у одного выводит всех детей... Загадка О_о