Решение
Варианты решений
Использовать модуль Views
- создать вид (блочный),
- фильтр по типу материала.
- полученный блок выводите куда вам нужно.
Использовать PHP-код в этом блоке
Модуль views потребляет очень много ресурсов. Его мощь и преимущество в том, что он может помочь быстро сделать вывод на страницу опред. материалов (списков, таблиц, анонсов и др.). Именно быстро сделать, но это не работает быстро.
Лично я стараюсь использовать этот модуль тогда, когда на странице с материалами нужно использовать фильтры - с этим модуль справляется превосходно, а повторить своими силами это трудно.
Итак, альтернативное решение - добавить в тело блока PHP-код, который будет выводить эти документы.
<?php
unset ($output);
$n=3;//Количество элементов в списке
//Выводим блок только при просмотре ноды. При редактировании не выводим:
if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
$sql="SELECT n.nid FROM {node} AS n
WHERE n.status=1 AND n.type='reklama' LIMIT %d";
$result = db_query($sql, $n);
while ($anode = db_fetch_object($result)) {
$node = node_load($anode->nid);
$output .= '<div class="node"><h3 class="title">'.$node->title.'</h3>'. $node->body.'</div>';
}
if ($output) echo $output;
}
?>
unset ($output);
$n=3;//Количество элементов в списке
//Выводим блок только при просмотре ноды. При редактировании не выводим:
if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
$sql="SELECT n.nid FROM {node} AS n
WHERE n.status=1 AND n.type='reklama' LIMIT %d";
$result = db_query($sql, $n);
while ($anode = db_fetch_object($result)) {
$node = node_load($anode->nid);
$output .= '<div class="node"><h3 class="title">'.$node->title.'</h3>'. $node->body.'</div>';
}
if ($output) echo $output;
}
?>
Формат ввода нужно установить в PHP.
Bookmark/Search this post with











Комментарии
Непонятно, как в сниппете используется строка
$node = node_load(arg(1));
Никак не используется. Исправил.
Рецепты это продукт коллективного разума сообщества drupal.ru. Лично я просто не в состоянии все перепроверить. Стараюсь публиковать только то, что лично проверил, но если источник проверенный, то иногда публикую то, что лично не проверял.
Во втором способе есть ошибки.
1. Зачем делать unset($output) ????
2. Прямой запрос в БД из блока
3. Нельзя по архитектуре совмещать функции получения данных и функции отрисовки готового HTML.
4. Зачем формировать объект $anode если там только nid??? я понимаю что если бы Ваш селект вычитывал поле тайтл и боди у этого нода раз уж все равно в базу лезете. тогда на размотке не придется делать node_load т.е.
//Выводим блок только при просмотре ноды. При редактировании не выводим:
if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
$sql="SELECT nr.title, nr.body FROM {node_revision} nr LEFT JOIN {node} n ON n.nid = nr.nid WHERE n.status=1 AND n.type='reklama' LIMIT %d";
$result = db_query($sql, $n);
while ($anode = db_fetch_object($result)) {
$output .= '<div class="node"><h3 class="title">'.$anode->title.'</h3>'. $anode->body.'</div>';
}
if ($output) echo $output;
}
Порезало html теги.
glu2006,
вывод $anode->body AS IS тоже не всегда хорошо. Когда там простой текст - все будет хорошо, но если там был какой-то сложный формат ввода - будет некрасиво.
node_load делает за нас эту работу - иначе нужно позабоиться и наложить на боди соответствующее форматирование.