Вставка содержимого поля в html.tpl.php в Drupal 7

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

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

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

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

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

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


person 25r43q    schedule 08.09.2011    source источник


Ответы (1)


Узел обычно недоступен в 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 на имя вашей темы.

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

person Clive    schedule 08.09.2011
comment
Итак, я добавил код в template.php и добавил $extra_css в файл html.tpl.php. html.tpl.php выглядит так: ‹?php print $extra_css; ?› И контент (сейчас не css, просто текст) не отображается на странице. Однако сообщение var extra_css не определено исчезло, поэтому оно должно быть видно. (Да, я сбросил кеш и т. д.) Спасибо за такой быстрый ответ - person 25r43q; 09.09.2011
comment
Блин я забыл как работает node_build_content(), поправлю код в посте выше - person Clive; 09.09.2011
comment
Не обращая внимания на то, что это может показаться полным геем, я должен сказать, что я очень люблю тебя, чувак. Для остальных, читающих это: Не забудьте изменить параметры отображения полей в field--field_FIELDNAME.tpl.php в папке вашей темы. У вас есть ссылка на хороший учебник для таких вещей? - person 25r43q; 09.09.2011
comment
Рад, что это помогло :) Немного сложно думать о конкретных учебниках, потому что этот метод использует несколько разных дисциплин Drupal, есть хороший О переопределении вывода темы, которая объясняет, как работает жизненный цикл темы и как вы можете передавать переменные в тему. Как вы получаете эти переменные в первую очередь, это отдельная история, хотя menu_get_object() всегда будет давать вам объект узла, если вы находитесь на странице узла, вооружившись которым, вы сможете получить хорошее заземление. - person Clive; 09.09.2011
comment
Большое спасибо, я имею в виду, что полнофункциональное исправление (в комплекте с кодом и всем остальным) менее чем за 30 минут лучше, чем премиальная поддержка в большинстве компаний. - person 25r43q; 09.09.2011