Как вывести 10 последних нод определенного вида
Прислано: Valeratal
ср, 31/10/2007 - 08:13
Собственно сабж
Знаю что можно вывести с помощью vievs конечно
Но, запросом к базе мне кажется был бы проще (или я не прав?)
- Valeratal's blog
- Для комментирования войдите или зарегистрируйтесь
Примерно так:
<?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));
}
?>- Для комментирования войдите или зарегистрируйтесь
хм, не работает чего то
- Для комментирования войдите или зарегистрируйтесь
отлаживать я не буду)
- Для комментирования войдите или зарегистрируйтесь
Вот этот код выведет 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
- Для комментирования войдите или зарегистрируйтесь
Полезный сниппет, спасибо.
- Для комментирования войдите или зарегистрируйтесь
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 это ссылка на "полный" нод...
- Для комментирования войдите или зарегистрируйтесь
Снипетты - http://setegnom.com/node/294
- Для комментирования войдите или зарегистрируйтесь
нашел эту тему в подшивке, решил дополнить ее следующим кодом:
<?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 .= '<p><br /><p>' . node_view(node_load($node->nid), 1) ;
}
$output .= theme('pager', NULL, 10 );
print $output;
?>что оно делает:
В 5 версии появилась возможность создавать свои типы материалов (это еще даже без СCK) но вот вывести их можно только таксономией и другими способами не связанными именно с "типом", было непонятно а зачем тогда эти типы были созданы =(
К примеру у меня есть тип материала "плюшки", и в него выносятся разнообразные полезности, но вот как вывести хотя бы постранично все это богатство - не устанавливая Views. Приведенный код и выведет 10 статей типа "ВАШ_ТИП_МАТЕРИАЛА" именно разбитым на страницы, и разбивка на страницы будет работать =) проверял и на чистых url - работает.
Код собственно был "выдернут" из api.dripal.ru =) , с похожим кодом выводились "блоги".
Писал для сайта на Drupal 5, но можно глянуть на api.drupal.org как выводятся блоги под 6 и если не будет под ней работать, то взять код оттуда.
- Для комментирования войдите или зарегистрируйтесь
Shedko, спасибо. Использовал первый приведенный вами скрипт для вывода последних картинок под 6.6. Все замечательно работает
- Для комментирования войдите или зарегистрируйтесь
До снипета:
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.
Кеш, правда, не включен, но запрос все равно должен быть один.
- Для комментирования войдите или зарегистрируйтесь
Последний код лучше, но все равно
Page execution time was 3626.09 ms. Executed 296 queries in 1996.35 milliseconds.
- Для комментирования войдите или зарегистрируйтесь
А как вывести просто заголовки конкретного типа нод?
- Для комментирования войдите или зарегистрируйтесь
http://docs.drupal.ru/node/33476
- Для комментирования войдите или зарегистрируйтесь









Комментарии