Передать переменную в шаблон поля из поля предварительной обработки темы ()
Я застрял, пытаясь передать переменные из моей функции theme_preprocess_field в файл шаблона. Я хочу иметь переменную для каждого из полей, которые я распечатываю в своем шаблоне.
Я использую модуль Параграфов в Drupal 7, так что это может сбить меня с толку, но я чувствую, что я действительно близок. Вот простой пример:
Функция предварительной обработки в моем template.php :
function merge_preprocess_field(&$variables) {
$element = $variables['element'];
if (isset($element['#field_name'])) {
if ($element['#field_name'] == 'field_title') {
$variables['test_title'] = $variables['items'][0]['#markup'];
}
}
}
Имя шаблона, который я использую, это paragraphs-item--full-text.tpl.php
.
field_title
называется ли имя поля внутри пакета абзацев full-text
.
Все, что я прочитал до сих пор, указывает на то, что я должен иметь доступ к переменной $variables['test_title']
в моем шаблоне таким образом:
<?php print render($test_title); ?>
Он не печатается даже после очистки кэша. Он даже появляется в массиве, когда я krumo($variables);
. Я что-то упускаю?
1 answers
Хорошо, я понял это. Моя функция предварительной обработки предназначалась для поля, но я пытался получить доступ к переменной в неправильном шаблоне. В итоге я создал отдельные функции предварительной обработки для каждого абзаца-элемента и предварительно обработал переменные там.
Во-первых, я создал функцию, которая позволила бы мне создавать функции предварительной обработки для типов сущностей:
function merge_preprocess_entity(&$vars, $hook) {
$function = 'merge_preprocess_' . $vars['entity_type'];
if (function_exists($function)) {
$function($vars, $hook);
}
}
Это позволило мне создать функцию предварительной обработки для элементов абзацев. Затем я использовал ту же идею для создания функций предварительной обработки для отдельных элементов абзацев:
function merge_preprocess_paragraphs_item(&$vars, $hook) {
$elements = $vars['elements'];
$function = 'merge_preprocess_paragraphs_item__' . $elements['#bundle'];
if (function_exists($function)) {
$function($vars, $hook);
}
}
Теперь я могу задать переменные, доступные в шаблонах элементов абзацев, например:
function merge_preprocess_paragraphs_item__smaller_full_width_text(&$vars, $hook) {
if ($vars['content']['field_cta']) {
$field_cta = !empty($vars['content']['field_cta'])? $vars['content']['field_cta'][0]['entity']['field_collection_item']: '';
foreach ($field_cta as $field_cta) {
// Make the CTA url available to the rest of the block
$vars['content']['cta_url'] = $field_cta['field_link'][0]['#markup'];
// Set character limit for CTA Text
$vars['content']['cta_text'] = truncate_utf8($field_cta['field_link_text'][0]['#markup'], 24, TRUE, FALSE);
}
}
}