访问树枝覆盖模板中的变量
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 }}
这是我所在的位置:
我下载了群组模块,为群组创建了自定义字段,然后在页面本身上用一个 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 }}