Вы здесь

Список документов определённого термина

Версия системы: 
Друпал 5

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

Комментарии

Изображение пользователя Sergey1917

Дайте мне сниппет и я переверну землю! Сниппеты буквально вдохнули в меня жизнь. Самые главные свои проблемы в Друпале с ними решил. Осталось кое-какие мелочи доработать.

В данном сниппете документы выводятся в разнобой. Как сделать, чтобы они выводились по алфавиту? Очень нужно. Да и правильнее это будет.

Изображение пользователя Sergey1917

Ну что-же вы молчите? Ответьте кто-нибудь пожалйста.

Изображение пользователя drupal.org.ru

На этой странице посмотри разницу в запросах: http://drupal.org.ru/snippet/330. Ищи по запросу ORDER BY. Разберёшься, расскажи что получилось.

Изображение пользователя Sergey1917

Ну и задачку вы мне задали. Это все равно, что секретаршу попросить внести изменение в код.

Насколько я понял, надо добавить следующее: ORDER BY u.name ASC.

Честно пытался разобраться. Вставлял в самые разные места сниппета. Или ничего не изменялось, или - ошибка обращения к базе (или ошибка запроса к базе).

Не получается. Помогите пожалуйста.

Изображение пользователя Sergey1917

Сетевой гном, отзовись. Выложили такие замечательные "вещи", как сниппеты, на радость людям, спасибо вам за это. Прошу маленькую поддержку. Я не програмист, PHP не знаю, как сделать, чтобы списки выводились по алфавиту? В приведенном выше примере, слишком большие различия с данныым сниппетом. Не могу сориентироваться. А для вас, как я понял, это пустяк. А это может понадобиться и в других сниппетах, и не только мне одному. Может научите, пожалуйста?

Изображение пользователя Sergey1917

Сетевой гном, ау. Вы хоть иногда заглядывайте на ваш сайт.

Изображение пользователя Sergey1917

Может, вы сделаете отдельную статью: "Список документов определённого термина, с сортировкой по алфавиту". Думаю она будет востребована.

Изображение пользователя drupal.org.ru

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

Изображение пользователя Sergey1917

setegnom, большое спасибо! Уже проверил, работает.

А то я и на форуме drupal.ru задал вопрос, так никто и не ответил. А для меня это костяк моего сайта, на котором все строится. Я сначала собирался на модуле Views (и к нему еще целая куча модулей) свои списки делать, но умный человек, В.Х., отговорил, и подсказал ваш сайт и конкретно сниппеты.

Попробую еще и на других сниппетах сделать эту вставку.

Всех благ вам и вашему сайту.

Изображение пользователя VladSavitsky

Спасибо за сниппет.
Преобразовал код, чтобы 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 раз как снежный ком :-(