Вывод нескольких блоков из одного модуля

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

Аватар пользователя v0id v0id 31 декабря 2009 в 13:31

Привет.
Хочу создать свой модуль, который бы выводил несколько блоков, но почему-то выводиться только один блок (Mymodule block #1 shows).
Я прочел статью hook_block, вроде бы ничего сложного нет, но даже если скопировать код который описан в статье - все равно выводиться только один блок. Подскажите, пожалуйста, в чем загвоздка?

UPD:

<?php
function contenttop_block($op='list'$delta=0$edit=array())
{
     if (
$op == 'list') {
        
$blocks[0] = array('info' => t('Mymodule block #1 shows ...'),
          
'weight' => 0'status' => 1'region' => 'content_top');
        
$blocks[1] = array('info' => t('Mymodule block #2 describes ...'),
          
'weight' => 1'status' => 1'region' => 'content_top');
        return 
$blocks;
      }
     elseif (
$op == 'configure' && $delta == 0) {
        
$form['items'] = array(
          
'#type' => 'select',
          
'#title' => t('Number of items'),
          
'#default_value' => variable_get('mymodule_block_items'0),
          
'#options' => array('1''2''3'),
        );
        return 
$form;
     }
     else if (
$op == 'save' && $delta == 0) {
        
variable_set('mymodule_block_items'$edit['items']);
     }
     else if (
$op == 'view') {
        switch(
$delta) {
          case 
0:
            
$block = array('subject' => t('Title of block #1'),
              
'content' => mymodule_display_block_1());
            break;
          case 
1:
            
$block = array('subject' => t('Title of block #2'),
              
'content' => mymodule_display_block_2());
            break;
        }
        return 
$block;
     }
}
?>

Комментарии

Аватар пользователя v0id v0id 31 декабря 2009 в 14:51

Сначала написал, потом включил... А потом начал его изменять.
Если я правильно понимаю, то вот здесь:

<?php
$blocks
[0] = array('info' => t('Mymodule block #1 shows ...'),
'weight' => 0'status' => 1'region' => 'content_top');
$blocks[1] = array('info' => t('Mymodule block #2 describes ...'),
'weight' => 1'status' => 1'region' => 'content_top');
?>

мы "создаем" 2 наших блока, которые потом и возращаем? Так вот, потом отображается только первый почему-то...

Аватар пользователя rustamaha rustamaha 14 апреля 2011 в 10:46

"RxB" wrote:
Попробуйте всё же пример отсюда http://api.drupal.ru/api/function/block_example_block/6
Он на сто процентов рабочий

Вот эта ссылка хорошая. Только у меня работал только один блок.

А наводку на решение я нашел на api.drupal.org, здесь:

У меня заработали несколько блоков только когда я стал указывать индексы в виде строк:

$blocks['my_first_block'] = array(
'info' => t('Example: configurable text string'),
);

$blocks['my_second_block'] = array(
'info' => t('Example: empty block'),
'status' => TRUE,
'weight' => 0,
'visibility' => 1,
'pages' => 'node/*',
);

И дальше, значения $delta (которое содержит индекс обрабатываемого блока) тоже проверяем на равенство этим строковым индексам:

switch ($delta) {
case 'my_first_block':
$block['subject'] = t('Title of block #1');
$block['content'] = spoiler_contents(1);
break;
case 'my_second_block':
$block['subject'] = t('Title of block #2');
$block['content'] = spoiler_contents(2);
break;
}