如何在预处理函数中为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'])之间有一个空格。我很确定这是不允许的。
–othermachines

我删除了空格,这实际上并不重要,无论有无空格,我都得到相同的结果。空格来自我从示例中复制的代码。
疯狂科学家

您是否重命名了功能?不应,template_preprocess_imagegallery_format但应使用主题或模块名称替换“模板”。您还需要清除缓存。
–othermachines

Answers:


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.info.yml外,在主题的根目录中创建文件atvdirect.theme
  • 在atvdirect.theme文件中添加以下代码
  • 在page.html.twig中使用{{logopath}}

    <?php
    function atvdirect_preprocess_page(&$variables) {
      $variables['logopath'] = '/'.drupal_get_path('theme','atvdirect') .'/logo.png';
    }
    ?>

1
谢谢你终于说什么文件本应能够加入到。
瑞安^ h

很好的答案,很好的解释。
学生
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.