#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
- Это не
vars
так — этоvariables
- Вы пропустили
template
ключ в своей реализации
шаблон: если указано, эта реализация темы является шаблоном, и это файл шаблона без расширения. Не ставьте .tpl.php в этом файле; это расширение будет добавлено автоматически механизмом рендеринга по умолчанию (которым является PHPTemplate). Если указан ‘path’, указанный выше, шаблон также должен находиться в этом пути.
Итак, как должен выглядеть ваш хук:
function mytheme_hook_theme() {
return array(
'my_theme' => array(
'variables' => array(
'output' => '',
),
'template' => 'my-theme',
...
Не забудьте после этого очистить кеши.