Как вывести 10 последних нод определенного вида

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

Аватар пользователя Valeratal Valeratal 31 октября 2007 в 11:13

Собственно сабж

Знаю что можно вывести с помощью vievs конечно
Но, запросом к базе мне кажется был бы проще (или я не прав?)

Комментарии

Аватар пользователя edhel edhel 31 октября 2007 в 18:36

Примерно так:

<?php
$nodes = db_query("select nid from node where type='MYTYPE' order by created desc limit 10");
while ($node = db_fetch_object($nodes)) {
print node_view(noad_load($node->nid));
}
?>

Аватар пользователя Shedko Shedko 1 ноября 2007 в 19:37

Вот этот код выведет 10 статей, не полных а их сокращенных версий.

<?php>
        $nlimit = 10;
        $type = "ВАШ_ТИП_МАТЕРИАЛА";
        $result = db_query_range(db_prefix_tables("SELECT n.created, n.title, n.nid
        FROM {node} AS n, {users} AS u
        WHERE n.type = '$type' AND n.status = 1 AND u.uid=n.uid
        ORDER BY n.created
        DESC "
), 0, $nlimit);
        while ($node = db_fetch_object($result)) {
          $items[] = node_view(node_load(array('nid' => $node->nid)), $teaser = TRUE, $page = TRUE, $links = FALSE)   ;
        }
        if (isset($items) && is_array($items) && count($items) > 0) {
         foreach ($items as $item){
                $output .=   $item . "<p>";
         }
        }
        print $output;

если нужны именно полные версии статей, то строчку

$items[] = node_view(node_load(array('nid' => $node->nid)), $teaser = TRUE, $page = TRUE, $links = FALSE)   ;
<code>
заменим на
<code>
$items[] = node_view(node_load(array('nid' => $node->nid)), $teaser = FALSE, $page = TRUE, $links = FALSE)   ;
<code>

работает и проверялось на 5.0, 5.1, 5.2

Аватар пользователя ilya ilya 22 января 2008 в 11:44

Shedko, спасибо, твой код выручил.
Только подскажы, как добавить еще отображения названия (title) нода вот в этом участке:
while ($node = db_fetch_object($result)) {
$items[] = node_view(node_load(array('nid' => $node->nid)), $teaser = TRUE, $page = TRUE, $links = FALSE) ;
}

Как я понимаю, это можно сделать здесь: node_load(array('nid' => $node->nid)), но как?
То есть, получить обычный список нодов с заголовком, телом или teaser, если teaser - тогда title это ссылка на "полный" нод...

Аватар пользователя Shedko Shedko 2 июля 2008 в 0:11

нашел эту тему в подшивке, решил дополнить ее следующим кодом:

<?php
global $user;
$output = '';

$result = pager_query(db_rewrite_sql("SELECT n.nid, n.created FROM {node} n WHERE n.type = 'ВАШ_ТИП_МАТЕРИАЛА' AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC"), 10 );

while ($node = db_fetch_object($result)) {
$output .= '
' . node_view(node_load($node->nid), 1) ;
}
$output .= theme('pager', NULL, 10 );
print $output;
?>

что оно делает:
В 5 версии появилась возможность создавать свои типы материалов (это еще даже без СCK) но вот вывести их можно только таксономией и другими способами не связанными именно с "типом", было непонятно а зачем тогда эти типы были созданы Sad

К примеру у меня есть тип материала "плюшки", и в него выносятся разнообразные полезности, но вот как вывести хотя бы постранично все это богатство - не устанавливая Views. Приведенный код и выведет 10 статей типа "ВАШ_ТИП_МАТЕРИАЛА" именно разбитым на страницы, и разбивка на страницы будет работать Smile проверял и на чистых url - работает.

Код собственно был "выдернут" из api.dripal.ru Smile , с похожим кодом выводились "блоги".

Писал для сайта на Drupal 5, но можно глянуть на api.drupal.org как выводятся блоги под 6 и если не будет под ней работать, то взять код оттуда.

Аватар пользователя sadmin sadmin 28 октября 2008 в 11:02

Shedko, спасибо. Использовал первый приведенный вами скрипт для вывода последних картинок под 6.6. Все замечательно работает

Аватар пользователя Samovarov Samovarov 12 февраля 2009 в 18:14

До снипета:
Page execution time was 2074.81 ms. Executed 173 queries in 803.02 milliseconds.

После:
Page execution time was 3862.42 ms. Executed 324 queries in 2159.88 milliseconds.

Кеш, правда, не включен, но запрос все равно должен быть один.