Привет.
Хочу создать свой модуль, который бы выводил несколько блоков, но почему-то выводиться только один блок (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;
}
}
?>
Комментарии
Код в студию, скрины не нужны
Спасибо, за отзыв.
Код добавил.
Сначала код в модуль размещали, потом включали, или включали, потом написали?
Сначала написал, потом включил... А потом начал его изменять.
Если я правильно понимаю, то вот здесь:
<?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 наших блока, которые потом и возращаем? Так вот, потом отображается только первый почему-то...
Регион "content_top" в теме есть? Попробуйте удалить его упоминания из кода и выключить\включить модуль
Да, такой регион есть. Сделал описанные Вами действия. Не помогло.
Попробуйте всё же пример отсюда http://api.drupal.ru/api/function/block_example_block/6
Он на сто процентов рабочий
Черт... сначала не работало, а теперь все отлично работает О_о
Спасибо RxB за помощь.
Вот эта ссылка хорошая. Только у меня работал только один блок.
А наводку на решение я нашел на 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;
}