@Vlad171

Как вывести результат запроса к БД в блоке?

Продолжаю терзать Drupal, а он терзает меня. Вопрос следующий. Создаю модуль для вывода кастомного блока с результатом выборки из базы данных (новости). Не могу понять именно механизм вывода выборки в блок. Код следующий и наверняка содержит много ошибок, ибо не работает:
<?php
function blocknews_block_info() {
  $blocks['fresh_news']=array(
    'info'       => t('Fresh News'),
    'status'     =>TRUE,
    'region'     =>'content',
    'weight'     =>0,
    'visibility' =>1,
  );
  return $blocks;
}

function last_news_block_content()
{
    $query = new EntityFieldQuery();
    $query->entityCondition('entity_type', 'node');
    $query->propertyCondition('status', NODE_PUBLISHED);
    $query->propertyCondition('type', 'news'); //Фильтр для простоты не задавал
    $result = $query->execute();
    if (isset($result['node'])) {
        $nodes = entity_load('node', array_keys($result['node'])); 
        $items = drupal_render(node_view_multiple($nodes)); //Вот здесь не понимаю вообще
    }
}

function blocknews_block_view($delta = '') {
    $block = array();

    if ($delta == 'fresh_news') {
        $block['subject'] = 'Last news';//Заголовок блока
        $block['content'] =last_news_block_content();
    }
    return $block;
}

Соответственно после подключения модуля и связи блока с регионом результата нет. Может кто помочь и объяснить где ошибка и как связаны block_view() и block_content()?
  • Вопрос задан
  • 280 просмотров
Решения вопроса 1
@heartdevil
плыву как воздушный шарик
Привет.

Не хочу показаться назойливым, но помните, я давал совет читать drupal.org?

Не бойтесь работать с сайтом. От этого никуда не деться. Все равно начнете рано или поздно сами ходить на сайт и работать с api.

Вот вас интересует blocknews_block_view и last_news_block_content. Идете на сайт и вводите в поисковике функции (типа hook_block_view, обязательно впереди hook, а не ваше название модуля blocknews). По второй функции вы ничего не найдете, потому что это вспомогательная функция. По вашему коду можно понять, что ее результат возвращается в $block['content'] в функции blocknews_block_view. Но так как у вас ничего на самом деле не возвращается, то и content пустой. А если он пустой, то блок не выводится.

UPDATE:

Да. В вашем случае, судя по всему функция block_content не возвращает данные. попробуйте поставить return. И еще совет. Не пытайтесь разом понять, где ошибка. Это очень сложно. Лучше пошагово выполняйте работу. Сначала написали вот такую функцию blocknews_block_info() и ВСЕ! Сразу протестили в друпале. Если блок подключился, значит можно приступать к выводу информации в блок. Далее подключаете вот эту функцию blocknews_block_view, но вот в ячейку $block['content'] присвойте простой текст $block['content'] = "hello world!"; По имени переменной должно быть понятно, что она отвечает за вывод content-а блока. Далее, если текст выводится в контент, то подключаете основную функцию вывода новостей. Тем самым локализуя свою проблему.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы