<?php
$taxo_id = 5; // номер термина
$list_no =10; // количество документов в списке
$sql = "SELECT node.title, node.nid FROM node INNER JOIN term_node ON node.nid = term_node.nid WHERE term_node.tid = $taxo_id LIMIT $list_no";
$output .= "<ul>";
$result = db_query($sql);
while ($anode = db_fetch_object($result)) {
$output .= "<li>".l($anode->title, "node/$anode->nid")."</li>";
}
$output .= "</ul>";
print $output;
?>
Комментарии
Дайте мне сниппет и я переверну землю! Сниппеты буквально вдохнули в меня жизнь. Самые главные свои проблемы в Друпале с ними решил. Осталось кое-какие мелочи доработать.
В данном сниппете документы выводятся в разнобой. Как сделать, чтобы они выводились по алфавиту? Очень нужно. Да и правильнее это будет.
Ну что-же вы молчите? Ответьте кто-нибудь пожалйста.
На этой странице посмотри разницу в запросах: http://drupal.org.ru/snippet/330. Ищи по запросу ORDER BY. Разберёшься, расскажи что получилось.
Ну и задачку вы мне задали. Это все равно, что секретаршу попросить внести изменение в код.
Насколько я понял, надо добавить следующее: ORDER BY u.name ASC.
Честно пытался разобраться. Вставлял в самые разные места сниппета. Или ничего не изменялось, или - ошибка обращения к базе (или ошибка запроса к базе).
Не получается. Помогите пожалуйста.
Сетевой гном, отзовись. Выложили такие замечательные "вещи", как сниппеты, на радость людям, спасибо вам за это. Прошу маленькую поддержку. Я не програмист, PHP не знаю, как сделать, чтобы списки выводились по алфавиту? В приведенном выше примере, слишком большие различия с данныым сниппетом. Не могу сориентироваться. А для вас, как я понял, это пустяк. А это может понадобиться и в других сниппетах, и не только мне одному. Может научите, пожалуйста?
Сетевой гном, ау. Вы хоть иногда заглядывайте на ваш сайт.
Может, вы сделаете отдельную статью: "Список документов определённого термина, с сортировкой по алфавиту". Думаю она будет востребована.
ORDER BY node.title ASC — таблица node, колонка title, упорядочивание А-Я.
<?php
$taxo_id = 5; // номер термина
$list_no =10; // количество документов в списке
$sql = "SELECT node.title, node.nid FROM node INNER JOIN term_node ON node.nid = term_node.nid WHERE term_node.tid = $taxo_id ORDER BY node.title ASC LIMIT $list_no";
$output .= "<ul>";
$result = db_query($sql);
while ($anode = db_fetch_object($result)) {
$output .= "<li>".l($anode->title, "node/$anode->nid")."</li>";
}
$output .= "</ul>";
print $output;
?>
setegnom, большое спасибо! Уже проверил, работает.
А то я и на форуме drupal.ru задал вопрос, так никто и не ответил. А для меня это костяк моего сайта, на котором все строится. Я сначала собирался на модуле Views (и к нему еще целая куча модулей) свои списки делать, но умный человек, В.Х., отговорил, и подсказал ваш сайт и конкретно сниппеты.
Попробую еще и на других сниппетах сделать эту вставку.
Всех благ вам и вашему сайту.
Ostdesign.com — блог: Drupal: список документов определенного термина.
Спасибо за сниппет.
Преобразовал код, чтобы SQL-запрос был безопасным, и использовал theme() для вывода:
$tid = 2;
$sql = "SELECT n.title, n.nid
FROM {node} AS n
INNER JOIN {term_node} AS tn USING (nid)
WHERE tn.tid=%d AND n.status = 1
ORDER BY n.created DESC";
$result = db_query($sql, $tid);
while ($n = db_fetch_object($result)) {
$term_links[] = l($n->title, 'node/'. $n->nid, array('attributes' => array('class' => 'vocabulary-list')));
}
echo theme('item_list', $term_links);
А что нужно сделать, чтобы использовать этот код несколько раз в одном шаблоне? У меня 7 списков с разными терминами, но каждый следующий повторяет документы предыдущего, и только потом выводит свои. И так 7 раз как снежный ком :-(