CMS 部分
Introduction
部分包含可重用的 Twig 标记块,可以在整个网站的任何地方使用。部分对于在不同页面或布局上重复的页面元素非常有用。一个很好的部分示例是页脚,它用于不同的页面布局.此外,部分需要使用 AJAX 更新页面内容.
部分模板文件位于/partials
主题目录的子目录。部分文件应该有htm
扩大。最简单的部分示例:
<p>This is a partial</p>
这Configuration section 对于 partials 是可选的,可以包含可选的description 显示在后台用户界面的参数。下一个示例显示了带有描述的部分:
description = "Demo partial"
==
<p>This is a partial</p>
部分配置部分还可以包含组件定义。Components 在另一篇文章中解释。
渲染局部
这{% partial "partial-name" %}
Twig 标签呈现部分。该标签有一个必需的参数——不带扩展名的部分文件名。请记住,如果您从subdirectory 您应该指定子目录名称。这{% partial %}
标签可以在页面、布局或其他部分中使用。引用部分页面的示例:
<div class="sidebar">
{% partial "sidebar-contacts" %}
</div>
将变量传递给部分
您会发现您经常需要将变量从外部代码传递给部分。这使得 partials 更有用。例如,您可以有一个呈现博客文章列表的部分。如果您可以将帖子集合传递给部分,则可以在博客存档页面、博客类别页面等上使用相同的部分。您可以通过在部分名称之后指定它们来将变量传递给部分{% partial %}
标签:
<div class="sidebar">
{% partial "blog-posts" posts=posts %}
</div>
您还可以分配新变量以在部分中使用:
<div class="sidebar">
{% partial "sidebar-contacts" city="Vancouver" country="Canada" %}
</div>
在部分内部,可以像访问任何其他标记变量一样访问变量:
<p>Country: {{ country }}, city: {{ city }}.</p>
动态Partials
Partials 和页面一样,可以使用任何 Twig 特性。请参阅动态页面 有关详细信息的文档。
部分执行生命周期
可以在 partials 的 PHP 部分定义一些特殊函数:onStart
和onEnd
.这onStart
函数在部分渲染之前和部分之前执行components 被执行。这onEnd
函数在部分渲染之前和部分之后执行components 被执行。在 onStart 和 onEnd 函数中,您可以将变量注入 Twig 环境。使用array notation
将变量传递给页面:
==
function onStart()
{
$this['hello'] = "Hello world!";
/**
* Variables that are already present on the page for Twig to use
* can be accessed through the embedded controller instance.
* If this partial was rendered by calling {% partial customVar="test" %}
* then you could access that value with the following:
*/
$this->controller->vars['customVar'];
/**
* Partial code sections also have access to the addJs() / addCss() asset
* loading methods which include support for deduplicating asset references
* which means that if you have a block-based system for editing theme content
* using grouped repeaters and a particular block partial requires CSS or JS
* dependencies, they can be loaded directly in the partial that uses them.
*/
$this->addJs('https://cdn.example.com/js/vendor.js');
$this->addCss('https://cdn.example.com/css/vendor.css');
}
==
<h3>{{ hello }}</h3>
Winter 提供的模板语言在标记指南.执行处理程序的总体顺序在动态布局 文章。
生命周期限制
由于它们实例化较晚,在页面呈现期间,部分组件的生命周期存在一些限制。它们不遵循标准执行过程,如布局执行生命周期.应注意以下限制:
- AJAX 事件未注册,将无法正常运行。
- 生命周期函数不能返回任何值。
- 常规 POST 表单处理将在呈现部分时发生。
通常,partials 中的组件使用是为基本组件设计的,这些组件无需太多处理即可呈现简单的标记,例如Like 或者Tweet 按钮。
NOTE: 如果您希望在存在于部分中的组件中使用 AJAX 事件,作为解决方法,您可以将组件添加到使用部分的页面或布局。该组件的实例将能够处理在部分中发出的 AJAX 请求。请注意,AJAX 请求将使用页面或布局中组件的配置,因此请确保此设置中组件的所有实例都具有相同的配置。