Вывод документов опреденного типа в блоке

31 Окт 2008
Опубликовано VladSavitsky
Задача: 

Показать в блоке документы определённого типа.

Решение

Варианты решений

Использовать модуль 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;
}
?>

Формат ввода нужно установить в PHP.

Авторы решений:
Версия Drupal:
Модули:

Комментарии

Непонятно, как в сниппете используется строка

$node = node_load(arg(1));

goodboy | Ноя 3rd, 2008 в 5:27 после полудня

Никак не используется. Исправил.

Рецепты это продукт коллективного разума сообщества drupal.ru. Лично я просто не в состоянии все перепроверить. Стараюсь публиковать только то, что лично проверил, но если источник проверенный, то иногда публикую то, что лично не проверял.

VladSavitsky | Ноя 28th, 2008 в 3:44 после полудня

Во втором способе есть ошибки.
1. Зачем делать unset($output) ????
2. Прямой запрос в БД из блока
3. Нельзя по архитектуре совмещать функции получения данных и функции отрисовки готового HTML.
4. Зачем формировать объект $anode если там только nid??? я понимаю что если бы Ваш селект вычитывал поле тайтл и боди у этого нода раз уж все равно в базу лезете. тогда на размотке не придется делать node_load т.е.

$n=3;//Количество элементов в списке
//Выводим блок только при просмотре ноды. При редактировании не выводим:
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;
}

glu2006 | Дек 3rd, 2009 в 10:09 утра

Порезало html теги.

glu2006 | Дек 3rd, 2009 в 10:11 утра

glu2006,
вывод $anode->body AS IS тоже не всегда хорошо. Когда там простой текст - все будет хорошо, но если там был какой-то сложный формат ввода - будет некрасиво.
node_load делает за нас эту работу - иначе нужно позабоиться и наложить на боди соответствующее форматирование.

VladSavitsky | Дек 7th, 2009 в 12:32 утра
 
 
 

RSS-лента новостей

Dries Buytaert по-русски
]]>Русский поиск Drupal]]>

Перенос сайта из Joomla в Drupal
Перенос сайта из WordPress в Drupal

]]> Drupal - это бесплатная система управления контентом с открытым исходным кодом ]]>