Как вывести на главной странице последние записи из каждого термина (терминов около 30)

Сб, 27/03/2010 - 09:38

Имеем 6 типов контента. На каждый тип создан свой словарь. В каждом словаре по 4-6 терминов.
Нужно вывести на главной странице последнюю запись из каждого термина.
Планировал создать по одному вьюсу на каждый тип материала (словарь). В котором вывести по одной последней ноде из каждого термина. И потом эти 6 блоков просто поместить в центральный регион.
Но не получается, ни фильтры, ни сортировка не помогают. Пробовал ставить сортировку по терминам + сортировку по дате, ожидая что эти два вида сортировки наложатся друг на друга. Не вышло.
Как вариант, можно конечно создать по одному вьюсу на каждый термин, но считаю это извращением.
Может стоит пойти принципиально иным путем?

0 Спасибо

Комментарии

Аватар пользователя direqtor
6 лет 10 months назад direqtor #

Тут не Drupal-, а SQL-гуру нужен...

Как-то даже в голову такой запрос не приходит. Views - это всего лишь оболочка над запросами.

0 Спасибо
Аватар пользователя psyh
6 лет 10 months назад psyh #

Искал решение, наткнулся на сниппеты http://content-management-systems.info/node/571 - Список 10 последних записей в блогах + краткое содержание и http://content-management-systems.info/node/591 - Список документов термина + название термина + дата создания документа"

Php и тем более SQL не знаю, но поискав 10 различий и применив технику копипаста сделал следущее:

<?php
  $taxo_id 
56;  // термин "Уход за лицом"
  
$listlength=1;  // количество документов в списке
  
$result1 pager_query(db_rewrite_sql("SELECT n.nid, n.created FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid in ($taxo_id) AND n.status = 1 ORDER BY n.created DESC"), $listlength);
  while (
$node db_fetch_object($result1)) {
    
$output .= node_view(node_load(array('nid' => $node->nid)), 1);
  }
print 
$output;
?>

<?php
  $taxo_id 
57;  // термин "Уход за телом"
  
$listlength=1;  // количество документов в списке
  
$result1 pager_query(db_rewrite_sql("SELECT n.nid, n.created FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid in ($taxo_id) AND n.status = 1 ORDER BY n.created DESC"), $listlength);
  while (
$node db_fetch_object($result1)) {
    
$output .= node_view(node_load(array('nid' => $node->nid)), 1);
  }
print 
$output;
?>

// И так далее по остальным терминам.
?>

Но где-то ошибка. По отдельности эти куски адекватно работают. Но в таком виде, у меня выводится первый тизер, затем когда выполняется второй кусок кода - выводится первый и второй тизер, и так далее, в арифметической прогрессии.

И вообще как я понимаю, чуть доработав можно указать просто массив из терминов, а не копипастить куски кода.

А можно пойти еще дальше, сделать более гибкое решение - указывать не термины, а словарь, и чтобы из него перебирались все термины.

Буду признателен за подсказку.

P.S. Ссылки не хотят вставляться.

0 Спасибо
Аватар пользователя goodboy
6 лет 10 months назад goodboy #

Попробуйте перед while ставить $output='';

0 Спасибо
Аватар пользователя psyh
6 лет 10 months назад psyh #

Goodboy спасибо. Так заработало )

А такое можно сделать?

Psyh написал:
И вообще как я понимаю, чуть доработав можно указать просто массив из терминов, а не копипастить куски кода.

А можно пойти еще дальше, сделать более гибкое решение - указывать не термины, а словарь, и чтобы из него перебирались все термины.

0 Спасибо
Аватар пользователя goodboy
6 лет 9 months назад goodboy #

Посмотрите функцию АPI taxonomy_get_tree и другие функции, начинающиеся с taxonomy

0 Спасибо
Аватар пользователя Sinkora
6 лет 8 months назад Sinkora #

Частое использование node_load на одной странице - одна из самых плохих идей, которые можно встретить в Друпале.

0 Спасибо
Аватар пользователя Sinkora
6 лет 8 months назад Sinkora #
direqtor написал:
Тут не Drupal-, а SQL-гуру нужен...

Да ну, запрос простейший.

0 Спасибо
Аватар пользователя Sinkora
6 лет 8 months назад Sinkora #

Кстати, топик как раз подтверждает, что Views - это больше зло, чем польза для Друпала;)

0 Спасибо
Аватар пользователя Обухов Никита
6 лет 8 months назад Обухов Никита #
Sinkora написал:
Да ну, запрос простейший.

Слушай, а не мог бы прокомментировать то что я нашкрябал? http://drupal.ru/node/43965

Есть подозрение, что у меня оно через *опу :)

0 Спасибо