访问树枝覆盖模板中的变量

Accessing variables in twig override templates

这是我所在的位置:

我下载了群组模块,为群组创建了自定义字段,然后在页面本身上用一个 twig 模板覆盖了它(页面--group.html.twig)。现在的问题是,如何将组中的自定义字段(字段的机器名称为“group_picture”)传递给页面的树枝模板--group.html.twig?

我用kint()查看是否有任何东西从组中传递下来,但没有传递任何东西。我在这里错过了什么?

顶级kint()变量:

'page' => array(33)
'theme_hook_original' => string(4) "page"
→'attributes' => Drupal\Core\Template\Attribute(1)
→'title_attributes' => Drupal\Core\Template\Attribute(1)
→'content_attributes' => Drupal\Core\Template\Attribute(1)
'title_prefix' => array(0)
'title_suffix' => array(0)
'db_is_active' => boolTRUE
'is_admin' => boolTRUE
'logged_in' => boolTRUE
→'user' => Drupal\Core\Session\AccountProxy(7)
→'directory' => string(23) "themes/custom/kropotkin"
→'base_path' => string(1) "/"
→'front_page' => string(1) "/"
→'language' => Drupal\Core\Language\Language(5)
'is_front' => boolFALSE
→'#cache' => array(1)
→'#attached' => array(1)
→'navbar_top_attributes' => Drupal\Core\Template\Attribute(1)
→'navbar_attributes' => Drupal\Core\Template\Attribute(1)
→'sidebar_first_attributes' => Drupal\Core\Template\Attribute(1)
→'sidebar_second_attributes' => Drupal\Core\Template\Attribute(1)
'container_navbar' => string(1) "0"
'container' => string(9) "container"
→'theme_hook_suggestions' => array(3)
'theme_hook_suggestion' => string(4) "page"

我的树枝覆盖目前是这样的:

{% extends "@themename/page.html.twig" %}

{% block content %}
    {{kint()}}
    BLAH BLAH
{% endblock %}

并且 page.html.twig 直接来自 bootstrap_barrio 的子主题模板。

使用 Drupal 核心的默认呈现引擎,您无法从 page--group.html.twig 访问 group.html.twig 的变量。你必须手动完成。

您可以实现 hook_preprocess_HOOK 从组字段中检索数据,然后将其传递给模板:

  • 在你的主题文件中(假设是your_theme.theme):
    function your_theme_preprocess_page(&$variables) {
      $group_id = \Drupal::routeMatch()->getRawParameter('group'); // get group ID from route
      if (!empty($group_id)) {
        $group = \Drupal\group\Entity\Group::load($group_id); // load group entity
        $field_text = $group->get('field_text')->value; // get field value you want, here I use a text field for example            
        $variables['group_field_text'] = $field_text; // store it in $variables, so you can access it in template
      }
    }
    
  • 在你的page.html.twig中:
    {{ group_field_text }}