Как вывести html из свойства массива содержимого?

#php #html #drupal #drupal-7

#php #HTML #drupal #drupal-7

Вопрос:

Я новичок в тематизации, и я только что унаследовал этот код. Мне нужно контролировать, где и как печатать #output, но он всегда отображается в верхней части страницы, над тегами HTML. Я просмотрел API renderable arrays, но не смог найти ничего конкретного для моей проблемы.

В mytheme.module:

 function mytheme_output_block() {
  $content = array(
    '#theme' => 'my_theme',
    '#output' => function_that_returns_JSON();
    ...

function mytheme_hook_theme() {
  return array(
    'my_theme' => array(
      'vars' => array(
      'output' => '',
    ...
  

И в my_theme.tpl.php Я пытался:

 <?php print $output; ?>
  

Но он игнорируется. Как мне управлять #output, чтобы я мог его стилизовать?

Комментарии:

1. Можете ли вы опубликовать более полный набор кода, особенно из my_theme.tpl.php ?

2. Не совсем:( но остальное не должно иметь значения, поскольку сейчас меня интересует только печать $output .

Ответ №1:

не уверен, но вам может потребоваться вызвать элемент массива напрямую. Что-то вроде:

 $theme = mytheme_hook_theme();
echo $theme['output'];
  

Надеюсь, это поможет

Комментарии:

1. Я пытался <?php $vars = get_defined_vars(); krumo($vars); ?> но выход был пуст, даже если это печатается на странице, над тега DOCTYPE….сам в шоке.

Ответ №2:

Какой Drupal вы используете? Я предполагаю, что D7.

Взгляните на документацию hook_theme: https://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_theme/7.x

  1. Это не vars так — это variables
  2. Вы пропустили template ключ в своей реализации

    шаблон: если указано, эта реализация темы является шаблоном, и это файл шаблона без расширения. Не ставьте .tpl.php в этом файле; это расширение будет добавлено автоматически механизмом рендеринга по умолчанию (которым является PHPTemplate). Если указан ‘path’, указанный выше, шаблон также должен находиться в этом пути.

Итак, как должен выглядеть ваш хук:

 function mytheme_hook_theme() {
  return array(
    'my_theme' => array(
      'variables' => array(
        'output' => '',
      ),
      'template' => 'my-theme',
    ...
  

Не забудьте после этого очистить кеши.