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

22 декабря 2007 в 12:54

Здравствуйте, уважаемые Друпальщики.
Заранее прошу прощения,возможно, за не очень ясную формулировку вопроса.
Я являюсь новичком в работе с Друпалом и немогу полностью оценить возможности этой системы.
Ранее работал с Джумлой. Друпал мне показался симпатишнее, чище и удобнее.
Но по ходу знакомства с ним некоторые вещи остаются непонятными.
И так... Очень хотел бы понять как организовать одну штуку...точнее... у меня есть словарь, содержащий термины, которые в свою очередь содержат статьи. Сделал ссылку в навигации на словарь, но он ,хитрец, перечисляет в заголовке страницы термины, а ниже выводит содержание этих терминов...
Вопрос мой в следующем: можно ли организовать вывод не содержимое терминов, а только список терминов (было бы здорово если бы под каждым из терминов была бы аннотация)...
Заранее благодарен за помощь.

Комментарии

эх, может написал не так, извините. Но незнаю как это сделать. Возможно кто нибудь все таки сможет ответить?
может ссылочки подскажите где почитать...

25 декабря 2007 в 17:01

Модуль форума смотрите - там именно так и сделано: выводятся контейнеры с описанием, а дальше форумы с описанием, а уже в форумах материалы

25 декабря 2007 в 19:19

Да, действительно в форумах так и сделано. Именно то что мне нужно, за исключением того что это форумы. Мне бы хотелось это сделать со словарем и терминами. Возможно есть какие нибудь специальные модули?

25 декабря 2007 в 23:54

<?php
$vid = 1; /* ID необходимого словаря */
$items = array();
$terms = taxonomy_get_tree($vid);
foreach ( $terms as $term ) {
//$count = taxonomy_term_count_nodes($term->tid);
//if ($count) {
$items[] = l($term->name,'taxonomy/term/'.$term->tid);
//}
}
print theme('item_list', $items);
?>
Помещаем в page.tpl.php.
Код выплевывает, список ссылок на соответствующие термины...
Если раскомментировать // то будут выводиться только термины которые назначены нодам:)
Это один из самых любимых сниппетов — часто нужен...

Слялякано отсюда: http://drupal.org/node/147153#comment-272909

26 декабря 2007 в 4:53

List Nodes by Vocabulary классно конечно, но он выводит, как я понял, не термины словаря (как хотелось бы мне), а содержимое всех терминов словаря.

a.a.egoroff - вот в принципе что нужно ) спасибо Smile теперь пытаюсь понять как заставить его только на определенной странице работать Smile если кто знает подскажите плиз ) да и неужели нет подобного модуля?

что бы было понятнее что мне надо я пожалуй нарисую )

заранее спасибо, жду еще возможные варианты реализации выше нарисованного )

26 декабря 2007 в 15:05

пользую так

<?php

$vid = 1; /* ID необходимого словаря */
$output = '';
$terms = taxonomy_get_tree($vid);
foreach ( $terms as $term ) {
//$count = taxonomy_term_count_nodes($term->tid);
//if ($count) {
// $items[] = l($term->name,'taxonomy/term/'.$term->tid);
//}

//вывожу через свою функцию темизации - можно подправить под себя
$output .= theme('catalog_item', $term);
}

//так можно выводить список нод термина
//$result = taxonomy_select_nodes(array($term->tid));
$sql = 'SELECT DISTINCT(n.nid), n.sticky, n.title, n.created FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid INNER JOIN {gift} g ON n.nid = g.nid WHERE tn.tid = %d AND n.status = 1 ORDER BY CAST(g.price AS UNSIGNED), n.title, n.created';
$sql_count = 'SELECT COUNT(DISTINCT(n.nid)) FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid = %d AND n.status = 1';
$result = pager_query($sql, variable_get('default_nodes_main', 10), 0, $sql_count, $term->tid);
$output .= taxonomy_render_nodes($result);
return $output;

//моя функция темизации подгружаю еще картинки категории
/**
* Format the catalog item
*/
function theme_catalog_item($term) {
//drupal_set_title(check_plain($term->name));

$output = '

';
if ($img = taxonomy_image_display($term->tid)) $output .= '
'. $img ."

\n";
if ($term->description) {
$output .= '

'. check_markup($term->description) ."

\n";
}
$output .= '

 

';
return $output;
}

?>

26 декабря 2007 в 17:34

Ну вот смотрите.
Для начала надо глянуть в api как именно работает функция l().... Потом понять как работает функция theme(). Плутая по коду станент ясно что:
theme('item_list', ... вызывает где-то theme_item_list()
theme('list', ... вызывает где-то theme_list()
Найти можно тотал коммандером по содержимому:)
Далее, если есть тема, напимер, site/all/themes/mytheme вышеуказанные функции можно переопределить:
1. В папе темы зодаем template.php
2. В него копируем полностью функцию.
3. Переименовываем ее из, например, theme_item_list() в mytheme_item_list()
Очень рекомендую проследить это момент, ибо функции темизации (theme_*) это ключ к получению нужного HTML-вывода.
Далее... хотелось бы понять критерии "определённости" той страницы, на которой надо выводить...
Практически этот код можно вставить в любое текстовое поле, которое поддерживает php:
1. Тело ноды
2. Содержимое блока
3. Шапка и подвал Views
Короче везде.

26 декабря 2007 в 18:08

if ($img = taxonomy_image_display($term->tid)) $output .= '

'. $img ."

\n";

эту строчку я вставил в модуле taxonomy, в файл taxonomy.pages, после 88-й строчки в output
теперь у меня под заголовком термина выходит его картинка! Спасибо большое!!!!!!

22 июня 2010 в 11:15