Подавление "Неопределенной переменной: переменные в представлении блока модуля()" без скрытия уведомления
Я попытался создать простой пользовательский блок внутри пользовательского модуля. есть уведомление, которое информирует меня о неопределенной переменной, но блок отображается правильно. Я не уверен, где ошибка в коде, но любой толчок в правильном направлении будет высоко оценен.
Я знаю, что могу скрыть сообщение об ошибке, обратившись к admin/config/development/logging
или с помощью таких модулей, как Отключить сообщение , но это не то, чего я хочу, так как это, по сути, просто скрывает проблему под ковер и скрывающие другие уведомления, на которые мне было бы интересно взглянуть.
Mymodule.модуль
<?php
/**
* Declare what blocks are provided by this module
* Implements hook_block_info().
*/
function mymodule_block_info() {
$block = array();
$block['myblock1'] = array(
'info' => t('Block number 1'),
);
$block['myblock2'] = array(
'info' => t('Block number 2'),
);
return $block;
}
/**
* Define what our block is going to look like.
* Implements hook_block_view().
*/
function mymodule_block_view($delta='') {
$block = array();
switch ($delta) {
case 'myblock1':
$block['content'] = theme('myblock1', $variables);
break;
case 'myblock2':
$block['content'] = theme('myblock2', $variables);
break;
}
return $block;
}
/**
* Implementation of hook_theme().
*/
function mymodule_theme() {
return array(
'myblock1' => array(
'variables' => array(),
'template' => 'templates/block--myblock1',
),
'myblock2' => array(
'variables' => array(),
'template' => 'templates/block--myblock2',
),
);
}
?>
1 answers
Проблема заключается в $block['content'] = theme('myblock1', $variables);
и $block['content'] = theme('myblock2', $variables);
: mymodule_block_view()
не определяет никакой переменной $variables
; просто определите ее или используйте массив напрямую.
Поскольку в mymodule_theme()
вы не определяете никаких переменных для своих тематических функций, просто замените свой mymodule_block_view()
следующим.
function mymodule_block_view($delta = '') {
$block = array();
switch ($delta) {
case 'myblock1':
$block['content'] = theme('myblock1', array());
break;
case 'myblock2':
$block['content'] = theme('myblock2', array());
break;
}
return $block;
}
Чтобы сделать вопрос более полным: Drupal не определяет никаких глобальных $variables
, и реализации hook_block_view()
не получают никаких $variables
в качестве параметра. Следовательно, $variables
может быть просто локальной переменной для вашей функции. То есть почему вы получаете эту ошибку: вы используете переменную без предварительного ее объявления.
Обратите внимание, что если бы $variables
была глобальной переменной, вы все равно должны объявить ее как global $variables
в своей функции или использовать как $GLOBALS['variables']
. (Не пытайтесь, так как это не работает, потому что не определяет никакой глобальной переменной с таким именем.)