подскажите пожалуйста как исправить код. вот часть моего модуля, которая отвечает за вывод данных из mysql на экран в виде блока.
<?php function news_tape_block_info(){
$blocks['news_tape'] = array(
'info' => t('News_tape'),
'cache' => DRUPAL_CACHE_PER_ROLE
);
return $blocks;
}
function news_tape_data(){
$query = db_select('news_tape', 'nt')
->fields('nt', array('id', 'title', 'body', 'date'))
->orderBy('id', 'DESC')
->execute();
return
$query;
}
function news_tape_block_view($delta = '') {
switch($delta){
case 'news_tape':
$block['subject'] = t('News tape');
if(
user_access('access content')){
$result = news_tape_data();
$items = array();
foreach (
$result as $item){
$items[] = array(
'data' => $item->title,
//'body' => $item->body
);
}
if (empty(
$items)) {
$block['content'] = t('News tape is empty.');
}
else {
$block['content'] = theme('item_list', array(
'items' => $items,
//'body' => $body
)
);
}
}
}
return
$block;
}?>
здесь мне непонятно как работает вот эта строка
'data' => $item->title,
непонятно почему для массива $items используется индекс "data". вместо него логичнее было бы прописать "title", но так не работает...
я спрашиваю потому, что мне кроме "title" нужно вывести "body". но как это сделать не знаю
Комментарии
<?php 'data' => $item->title.'<div>'.$item->body.'</div>',?>
но это же html в логике. как я понимаю, это не очень хорошо
$items[] = array('data' => $item->title);
равно
$items[] = $item->title;
но первый вариант нужен для того, что-бы присвоить класс к каждому элементу списка
$items[] = array('data' => $item->title, 'class' => array('active-class'));
извиняюсь за тупизм с моей стороны, но я не совсем понял зачем нужен класс(data), если он далее в коде нигде не используется?
не могли бы вы подсказать как вывести все мои три поля в $block['content'] ?
это мне нужно затем, чтобы каждое из этих трёх полей было в отдельном контейнере
$items[] = $item->title . $item->body;
если по вашему, то вот что получается
prozaik.16mb.com/misc/dr.png
а мне нужно так:
prozaik.16mb.com/misc/dr2.png
Зачем нужен индекс 'data' смотрите тут https://api.drupal.org/api/drupal/includes%21theme.inc/function/theme_it...
Ведь в этой строчке, по сути, и вызывается функция theme_item_list
<?php
$block['content'] = theme('item_list', array(
'items' => $items,
//'body' => $body
));
?>
Так что, чтобы вывести ваше боди, нужно его соеденить в строку с тайтлом. Можно добавить свой html, чтобы обернуть или разделить тайтл и боди. voviko вам рабочий вариант написал.
В блоках можно выводить html, это уже не совсем логика, а уже генерация контента.
скажите пожалуйста, не будет ли грубой ошибкой вместо использования разметки в news_tape_block_view() всё таки написать и использовать свою функцию темизации по типу существующей theme_item_list() ??
если с программированием не бумбум, используйте views не морочтесь
через views я умею. мне интересно через api
нет, не будет. Так даже правильней наверно.