如何通过自定义控制器 drupal 8 将变量传递给主题模板
How do I pass variables to theme template via custom controller drupal 8
我目前在我的 Drupal 网站上安装了一个我购买的主题。
主题文件夹内有一个模板文件夹,其中包含:
- page.html.twig
- 页--front.html.twig
来自 page.html.twig 的片段如下所示:
<footer class="site-footer">
<div class="layout-container">
{% if page.footer_first or page.footer_second or page.footer_third %}
<div class="footer-top">
<div class="footer-top-inner">
{{ page.footer_first }}
{{ page.footer_second }}
{{ page.footer_third }}
</div>
</div>
{% endif %}
{% if page.footer_left or page.footer_right %}
<div class="footer-bottom">
<div class="footer-bottom-inner">
{{ page.footer_left }}
{{ page.footer_right }}
</div><!-- /.footer-bottom-inner -->
</div>
{% endif %}
</div>
</footer>
我创建了一个自定义模块 (business_listing),它加载了不同的 .html.twig 模板 我在 business_listing.module 中添加了这些模板:
function business_listing_theme($existing, $type, $theme, $path) {
return [
// business-listing-detail.html.twig
'business_listing_detail' => [
'variables' => ['data' => [], 'slides' => [], 'paths' => [], 'page' => []],
],
]
}
基本上我想知道如何从我的自定义模块控制器为页脚动态添加标记。
我的自定义模块模板文件夹中有一个名为 business-listing-detail.html.twig 的页面。据我了解 business-listing-detail.html.twig uses/somehow extends page.html.twig 在我的 theme/templates 中。我现在想知道的是如何使用我的控制器将 {{page.footer_left}}
等部分添加到我的业务列表详细信息。html.twig 或 page.html.twig?我尝试使用以下方法添加页脚:`
$页['footer_left'] = "This should appear in the .footer-bottom div?";
$build = [];
$build['business_listing_detail'] = [
'#theme' => 'business_listing_detail',
'#data' => $record,
'#slides' => $slides,
'#paths' => $this->paths,
'#page' => $page
];`
在与我的业务列表详细信息页面关联的控制器功能中,希望 page.html.twig 将检测到此 page.footer_left 并呈现显示页脚,但是这没有用。该变量存在于 business-listing-detail.html.twig 中,但我的主题 page.html.twig 中的 {% if page.footer_left %}
未触发。请拜托,任何帮助或建议将不胜感激 <3
基本上我想做的就是为我的自定义模块中的特定页面动态呈现模板,这允许我 implement/send 标记到我的主题中定义的 sections/regions,例如。 featured_top、content_top & page.content
亲切的问候,
马特
看来您可能走错了路...我强烈建议您阅读有关 Drupal 8 Block system, and then investigate custom blocks 的内容。
我目前在我的 Drupal 网站上安装了一个我购买的主题。
主题文件夹内有一个模板文件夹,其中包含:
- page.html.twig
- 页--front.html.twig
来自 page.html.twig 的片段如下所示:
<footer class="site-footer">
<div class="layout-container">
{% if page.footer_first or page.footer_second or page.footer_third %}
<div class="footer-top">
<div class="footer-top-inner">
{{ page.footer_first }}
{{ page.footer_second }}
{{ page.footer_third }}
</div>
</div>
{% endif %}
{% if page.footer_left or page.footer_right %}
<div class="footer-bottom">
<div class="footer-bottom-inner">
{{ page.footer_left }}
{{ page.footer_right }}
</div><!-- /.footer-bottom-inner -->
</div>
{% endif %}
</div>
</footer>
我创建了一个自定义模块 (business_listing),它加载了不同的 .html.twig 模板 我在 business_listing.module 中添加了这些模板:
function business_listing_theme($existing, $type, $theme, $path) {
return [
// business-listing-detail.html.twig
'business_listing_detail' => [
'variables' => ['data' => [], 'slides' => [], 'paths' => [], 'page' => []],
],
]
}
基本上我想知道如何从我的自定义模块控制器为页脚动态添加标记。
我的自定义模块模板文件夹中有一个名为 business-listing-detail.html.twig 的页面。据我了解 business-listing-detail.html.twig uses/somehow extends page.html.twig 在我的 theme/templates 中。我现在想知道的是如何使用我的控制器将 {{page.footer_left}}
等部分添加到我的业务列表详细信息。html.twig 或 page.html.twig?我尝试使用以下方法添加页脚:`
$页['footer_left'] = "This should appear in the .footer-bottom div?";
$build = [];
$build['business_listing_detail'] = [
'#theme' => 'business_listing_detail',
'#data' => $record,
'#slides' => $slides,
'#paths' => $this->paths,
'#page' => $page
];`
在与我的业务列表详细信息页面关联的控制器功能中,希望 page.html.twig 将检测到此 page.footer_left 并呈现显示页脚,但是这没有用。该变量存在于 business-listing-detail.html.twig 中,但我的主题 page.html.twig 中的 {% if page.footer_left %}
未触发。请拜托,任何帮助或建议将不胜感激 <3
基本上我想做的就是为我的自定义模块中的特定页面动态呈现模板,这允许我 implement/send 标记到我的主题中定义的 sections/regions,例如。 featured_top、content_top & page.content
亲切的问候, 马特
看来您可能走错了路...我强烈建议您阅读有关 Drupal 8 Block system, and then investigate custom blocks 的内容。