[РЕШЕНО]вывод данных из mysql в блок через модуль

Главные вкладки

Аватар пользователя zlodiak zlodiak 6 ноября 2013 в 16:40

подскажите пожалуйста как исправить код. вот часть моего модуля, которая отвечает за вывод данных из 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". но как это сделать не знаю

Комментарии

Аватар пользователя penexe penexe 6 ноября 2013 в 18:40

$items[] = array('data' => $item->title);
равно
$items[] = $item->title;

но первый вариант нужен для того, что-бы присвоить класс к каждому элементу списка
$items[] = array('data' => $item->title, 'class' => array('active-class'));

Аватар пользователя zlodiak zlodiak 6 ноября 2013 в 20:53

penexe wrote:
$items[] = array('data' => $item->title);
равно
$items[] = $item->title;

но первый вариант нужен для того, что-бы присвоить класс к каждому элементу списка
$items[] = array('data' => $item->title, 'class' => array('active-class'));

извиняюсь за тупизм с моей стороны, но я не совсем понял зачем нужен класс(data), если он далее в коде нигде не используется?

не могли бы вы подсказать как вывести все мои три поля в $block['content'] ?

это мне нужно затем, чтобы каждое из этих трёх полей было в отдельном контейнере

Аватар пользователя zlodiak zlodiak 6 ноября 2013 в 21:44

penexe wrote:
$items[] = $item->title . $item->body;

если по вашему, то вот что получается
prozaik.16mb.com/misc/dr.png

а мне нужно так:
prozaik.16mb.com/misc/dr2.png

Аватар пользователя serega111 serega111 6 ноября 2013 в 21:36

Зачем нужен индекс '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 вам рабочий вариант написал.

"zlodiak" wrote:
но это же html в логике. как я понимаю, это не очень хорошо

В блоках можно выводить html, это уже не совсем логика, а уже генерация контента.

Аватар пользователя zlodiak zlodiak 7 ноября 2013 в 10:48

"zlodiak" wrote:
но это же html в логике. как я понимаю, это не очень хорошо
В блоках можно выводить html, это уже не совсем логика, а уже генерация контента.

скажите пожалуйста, не будет ли грубой ошибкой вместо использования разметки в news_tape_block_view() всё таки написать и использовать свою функцию темизации по типу существующей theme_item_list() ??

Аватар пользователя serega111 serega111 7 ноября 2013 в 11:56

"zlodiak" wrote:
скажите пожалуйста, не будет ли грубой ошибкой вместо использования разметки в news_tape_block_view() всё таки написать и использовать свою функцию темизации по типу существующей theme_item_list() ??

нет, не будет. Так даже правильней наверно.