Подавление "Неопределенной переменной: переменные в представлении блока модуля()" без скрытия уведомления


Я попытался создать простой пользовательский блок внутри пользовательского модуля. есть уведомление, которое информирует меня о неопределенной переменной, но блок отображается правильно. Я не уверен, где ошибка в коде, но любой толчок в правильном направлении будет высоко оценен.

Я знаю, что могу скрыть сообщение об ошибке, обратившись к 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',
    ),
  );
}

?>
Author: Cerilla, 2016-04-23

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']. (Не пытайтесь, так как это не работает, потому что не определяет никакой глобальной переменной с таким именем.)

 2
Author: kiamlaluno, 2016-04-23 14:19:55