Здравствуйте, уважаемые Друпальщики.
Заранее прошу прощения,возможно, за не очень ясную формулировку вопроса.
Я являюсь новичком в работе с Друпалом и немогу полностью оценить возможности этой системы.
Ранее работал с Джумлой. Друпал мне показался симпатишнее, чище и удобнее.
Но по ходу знакомства с ним некоторые вещи остаются непонятными.
И так... Очень хотел бы понять как организовать одну штуку...точнее... у меня есть словарь, содержащий термины, которые в свою очередь содержат статьи. Сделал ссылку в навигации на словарь, но он ,хитрец, перечисляет в заголовке страницы термины, а ниже выводит содержание этих терминов...
Вопрос мой в следующем: можно ли организовать вывод не содержимое терминов, а только список терминов (было бы здорово если бы под каждым из терминов была бы аннотация)...
Заранее благодарен за помощь.
Комментарии
эх, может написал не так, извините. Но незнаю как это сделать. Возможно кто нибудь все таки сможет ответить?
может ссылочки подскажите где почитать...
Непонятно. Может быть вам проще описать без Drupal-терминологии (словарь, термин, аннотация). Что хотите сделать-то на сайте?
Модуль форума смотрите - там именно так и сделано: выводятся контейнеры с описанием, а дальше форумы с описанием, а уже в форумах материалы
Да, действительно в форумах так и сделано. Именно то что мне нужно, за исключением того что это форумы. Мне бы хотелось это сделать со словарем и терминами. Возможно есть какие нибудь специальные модули?
Возможно подойдёт этот: List Nodes by Vocabulary.
<?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
List Nodes by Vocabulary классно конечно, но он выводит, как я понял, не термины словаря (как хотелось бы мне), а содержимое всех терминов словаря.
a.a.egoroff - вот в принципе что нужно ) спасибо теперь пытаюсь понять как заставить его только на определенной странице работать если кто знает подскажите плиз ) да и неужели нет подобного модуля?
что бы было понятнее что мне надо я пожалуй нарисую )
заранее спасибо, жду еще возможные варианты реализации выше нарисованного )
пользую так
<?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 .= '
\n";
if ($term->description) {
$output .= '
\n";
}
$output .= '
';
return $output;
}
?>
Ну вот смотрите.
Для начала надо глянуть в 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
Короче везде.
"theme('item_list', ... вызывает где-то theme_item_list()
theme('list', ... вызывает где-то theme_list()"
Вообще говоря, это не так.
Хм. А как? Просто функции theme_item_list() и theme_list() объективно есть. Я даже встречал их:)
спасибо большое за код ) сейчас буду пробовать.
if ($img = taxonomy_image_display($term->tid)) $output .= '
\n";
эту строчку я вставил в модуле taxonomy, в файл taxonomy.pages, после 88-й строчки в output
теперь у меня под заголовком термина выходит его картинка! Спасибо большое!!!!!!