Передача переменных в файл шаблона - PullRequest
0 голосов
/ 27 марта 2012

В модуле, который я разрабатываю, я использую следующий код.

function mymodule_page_alter(&$page) {
  global $user;

  $page['sidebar_first'] = array(
    '#markup' => 'text for first sidebar'
  );
}

Как я могу загрузить файл шаблона HTML на первую боковую панель и передать в него несколько переменных? Может быть, это будет что-то вроде следующего кода.

$page['sidebar_first'] = array(
  '#template' => path,
  '#variables' => array(),
);

1 Ответ

0 голосов
/ 27 марта 2012

Вам необходимо использовать атрибут "#theme", например, в следующем коде.

  $build['dblog_table'] = array(
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#attributes' => array('id' => 'admin-dblog'),
    '#empty' => t('No log messages available.'),
  );

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

В этом примере theme_table () получит следующий массив.

array(
  'header' => $header,
  'rows' => $rows,
  'attributes' => array('id' => 'admin-dblog'),
  'empty' => t('No log messages available.'),
);

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

Вы определяете функцию темы в вашей hook_theme () , используя необходимые ключи, используемые для функции темы, которая использует файл шаблона, например, в следующем коде.

function mymodule_theme($existing, $type, $theme, $path) {
  return array(
    'mymodule_sidebar' => array(
      'variables' => array('topics' => NULL, 'parents' => NULL, 'tid' => NULL, 'sortby' => NULL),
      'template' => 'mymodule-display',
    ),
  );
}

Функция темы будет затем использоваться с чем-то похожим на следующий код.

$page['sidebar_first'] = array(
  '#theme' => 'mymodule_sidebar',
  '#topics' => array('first topic', 'second topic', 'third topic'),
  '#parents' => array('my topics', 'my friend's topics'),
);

Переменные, которые не получают явного значения, получат значение по умолчанию, указанное в hook_theme(); в этом случае значение по умолчанию для используемых переменных - NULL.

...