Инъекция содержимого поля в html.tpl.php в Drupal 7 - PullRequest
1 голос
/ 09 сентября 2011

Я пытаюсь создать один тип контента, который может повторно использовать jQuery-галерею с разными стилями в зависимости от того, на какой странице вы находитесь.

Итак, я сделал одно поле с именем field_CSS, куда я поместил CSS. Однако из соображений производительности (и ради очистки кода) я хочу поместить его в HEAD-раздел.

Содержимое в разделе заголовка отображается в html.php.tpl-filde, а поле соответствует типу содержимого определенного узла.

Я пробовал <?php print render($content['field_CSS']) ?> <?php print render($page['field_CSS']) ?> <?php print $node->field_CSS[0]['view']; ?> и много других вариантов. Кто-нибудь, кто знает, что написать, чтобы он появился в файле html.tpl.php?

Поле содержит только чистый CSS, который теперь печатается в виде встроенного кода.

РЕДАКТИРОВАТЬ: Клайв пост работает без нареканий. Только не забудьте исправить тематику поля, чтобы вы не получили div в css-секции.

1 Ответ

3 голосов
/ 09 сентября 2011

Узел обычно недоступен в html.tpl.php, поэтому вам нужно будет вручную получить содержимое поля в функции предварительной обработки. Поместите что-то вроде этого в файл шаблона вашей темы:

function MYTHEME_preprocess_html(&$vars) {
  $node = menu_get_object();

  if ($node && isset($node->nid)) {
    $node = node_load($node->nid);

    node_build_content($node);

    $vars['extra_css'] = render($node->content['field_CSS']);
  } 
}

Тогда у вас будет переменная $extra_css в html.tpl.php, которая будет содержать ваше визуализированное поле. Вам нужно будет очистить кеш после того, как вы реализовали функцию предварительной обработки, и замените MYTHEME названием вашей темы.

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

...