Как добавить переменную для шаблона Twig в моей функции предварительной обработки?

10

Я использую следующий код для предварительной обработки переменных для моего шаблона:

function template_preprocess_imagegallery_format(&$vars) {
  template_preprocess_image_formatter($vars);
  $vars['image']['#theme'] = 'igimage';
  $vars['image']['#thumbnail'] = ImageStyle::load('thumbnail')->buildUrl($vars ['image']['#uri']);
  $vars['image']['#fullimage'] = file_create_url($vars ['image']['#uri']);
}

Переменная #uri уже присутствует, и если я просто изменю ее, все будет отлично. Но мне нужно добавить дополнительные переменные, так как мне нужны два разных стиля одного и того же изображения. Но простое добавление этих переменных в массив не работает.

Если я добавлю доступные переменные в свой шаблон Twig с помощью {{ dump(_context|keys) }}, я не увижу добавленные там переменные. Если я пытаюсь использовать их в моем шаблоне, ничего не вставляется.

Я вижу, что значения добавляются в массив, когда я выкидываю переменную изображения в теме, которая отображает все поле, я вижу свои переменные в массиве. Но они все еще не доступны в шаблоне, который отображает переменную самого изображения.

Что еще мне нужно сделать, чтобы добавить переменную в функцию предварительной обработки, которую я могу использовать в своем шаблоне Twig?

Злой ученый
источник
У вас есть пробел между именем массива $varsи вашими ключами (например ['image']). Я уверен, что это запрещено.
машины
Я удалил пробелы, это на самом деле не имеет значения, и я получил тот же результат с пробелами или без них. Пробелы взяты из кода, который я скопировал из примера.
Безумный Ученый
Вы переименовали функцию? Это не должно быть, template_preprocess_imagegallery_formatно шаблон должен быть заменен на вашу тему или название модуля. Вам также понадобится очистить кеш.
машины

Ответы:

8

Я наконец решил проблему, оказалось, что проблема заключалась в том, что я пытался добавить переменные в неправильный препроцессор. Редактирование #theme работает там, но для добавления переменных мне нужно было предварительно обработать тему, которую я там установил:

function template_preprocess_imagegallery_format(&$vars) {
  template_preprocess_image_formatter($vars);
  $vars['image']['#theme'] = 'igimage';
}

function template_preprocess_igimage(&$vars) {
    $vars['thumbnail'] = ImageStyle::load('thumbnail')->buildUrl($vars['uri']);
    $vars['fullimage'] = file_create_url($vars['uri']);
}
Злой ученый
источник
4

Название темы: atvdirect

  • создайте файл atvdirect.theme в корне вашей темы, кроме atvdirect.info.yml
  • добавьте приведенный ниже код в файл atvdirect.theme
  • использовать {{logopath}} в page.html.twig

    <?php
    function atvdirect_preprocess_page(&$variables) {
      $variables['logopath'] = '/'.drupal_get_path('theme','atvdirect') .'/logo.png';
    }
    ?>
Gurcharan
источник
1
Спасибо, что наконец сказали, в каком файле это должно быть размещено.
Райан Х
Отличный ответ, хорошо объяснил.
Ученик