我在路由中定义了一个自定义页面,其
ControllerBase
类。我想覆盖此页面的整个page.html.twig
。
如果我使用
hook_theme
并在那里定义 'page__test' => [...]
,它会用我的 page--test.html.twig
覆盖页面,但我没有来自 ControllerBase
类的变量。
要覆盖自定义页面的整个
page.html.twig
模板,您可以使用以下方法:
hook_theme_suggestions_HOOK_alter
为您的页面建议自定义模板:/**
* Implements hook_theme_suggestions_HOOK_alter().
*/
function my_theme_theme_suggestions_page_alter(array &$suggestions, array $variables) {
// Check if this is your custom page.
if (\Drupal::routeMatch()->getRouteName() == 'your.route_name') {
// Suggest a custom template for the page.
$suggestions[] = 'page__test';
}
}
page--test.html.twig
,在此文件中您可以访问ControllerBase
类中的变量:{# themes/custom/my_theme/templates/page--test.html.twig #}
<div class="layout-container">
<header role="banner">
{{ page.header }}
</header>
{{ page.primary_menu }}
{{ page.secondary_menu }}
{{ page.breadcrumb }}
{{ page.highlighted }}
{{ page.help }}
<main role="main">
<a id="main-content" tabindex="-1"></a>
<div class="layout-content">
{{ page.content }}
</div>
{% if page.sidebar_first %}
<aside class="layout-sidebar-first" role="complementary">
{{ page.sidebar_first }}
</aside>
{% endif %}
{% if page.sidebar_second %}
<aside class="layout-sidebar-second" role="complementary">
{{ page.sidebar_second }}
</aside>
{% endif %}
</main>
{% if page.footer %}
<footer role="contentinfo">
{{ page.footer }}
</footer>
{% endif %}
</div>