Программный вывод нод в блоке Drupal 7.

image

05.07.13
Comments 4

Всем привет, в сегодняшнем уроке я покажу вам, как создать простой модуль для CMS Drupal 7, который будет выводить последние записи определенного типа материалов из базы данных. Честно сказать этот модуль не несет какой то пользы, так как для таких задач чаще всего  используют модуль views. Цель этого урока показать как работать с базой данных в Drupal 7, и научиться выводить полученные из базы  данные в блок.

Первое что нам нужно сделать, это создать папку для нашего модуля, имя которой будет его названием, пусть он называется last_node. Затем создайте в этой папке файл last_node.info и last_node.module. Файл last_node.info нужен для инициализации нашего модуля системой, в него мы запишем следующие строки:

name = Last node
description = Last node module.
core = 7.x

Это самый минимум того что может содержать данный файл, но для простых модулей этого достаточно, прочитать более подробно о файле info вы можете прочитать на других ресурсах, об этом уже много раз писалось, так что я не хочу повторяться, а пока давайте разберем то что имеем:

Пункт name – это имя нашего модуля, description – описание модуля, core – версия ядра Друпал, которая требуется для установки модуля.

Теперь приступим к файлу last_node.module. В этом файле будем описывать функционал нашего модуля. Давайте выведем в блок 10 последних материалов, какого либо типа контента, у меня это будет product.

Все пояснения как работает данный модуль я прописал в комментариях:

function last_node_block_content() {
  // Выбираем ноды из базы
  $query = db_select('node', 'n') //Выбираем таблицу в базе данных, параметр n - это псевдодим таблицы
    ->fields('n', array('nid', 'title')) //Выбираем поля в таблице
    ->condition('status', NODE_PUBLISHED) //Условие, опубликованная нода
    ->condition('type', 'product') //Условие, нода типа product
    ->orderBy('nid', 'DESC') //Порядок сортировки
    ->range(0, 10); //Извлечь первые 10 записей
  
  $items = array();
  foreach ($query->execute() as $noder) {
    $items[] = l($noder->title, 'node/' . $noder->nid); //Функция l формирует ссылку
  }//Сейчас в массиве items[] находятся 10 нод
 
  $content = theme('item_list', array('items' => $items));  // C помощью функции theme темизируем данные в виде списка
  return $content;
}

/**
 * Реализация hook_block_info()
 */
// Этот хук нужен лишь для того чтобы объявить новый блок
function last_node_block_info() { 
  $blocks['last-comments'] = array('info' => 'Last comments');//Административное имя блока
  return $blocks;
}
 
/**
 * Реализация hook_block_view();
 */
//С помощью этого хука отображаем наш блок
function last_node_block_view($delta = '') {
  $block = array();
 
  if ($delta == 'last-comments') {
    $block['subject'] = 'Last comments';//Заголовок блока
    $block['content'] = '' . last_node_block_content() . '';//Выводим нашу функцию
  }
 
  return $block;
}

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

Tags: 

Комментарии

Стас 07.07.13

Приветствую Серега.
Вот интересует как сделать вывод случайной статьи в блоке?
В Viewse так и не понял как реализуется.

admin 08.07.13

Смотрите в критериях сортировки

Максим 15.08.14

спасибо от души братан, помог с рандом выводом)

Дмитрий 22.05.15

Здравствуйте. Код хороший, рабочий, но не учитывает мультиязычность.
Выводит все подряд . Как это исправить?

Комментировать