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

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

Аватар пользователя nBezborodov nBezborodov 22 декабря 2007 в 12:54

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

Комментарии

Аватар пользователя nBezborodov nBezborodov 25 декабря 2007 в 17:01

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

Аватар пользователя andypost@drupal.org andypost@drupal.org 25 декабря 2007 в 19:19

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

Аватар пользователя nBezborodov nBezborodov 25 декабря 2007 в 23:54

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

Аватар пользователя Сашка Сашка 26 декабря 2007 в 4:53

<?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

Аватар пользователя nBezborodov nBezborodov 26 декабря 2007 в 15:05

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

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

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

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

Аватар пользователя andypost@drupal.org andypost@drupal.org 26 декабря 2007 в 17:34

пользую так

<?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 в 18:08

Ну вот смотрите.
Для начала надо глянуть в 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
Короче везде.

Аватар пользователя otmoroz otmoroz 22 июня 2010 в 11:15

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

'. $img ."

\n";

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