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 部分定义一些特殊函数:onStartonEnd.这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 提供的模板语言在标记指南.执行处理程序的总体顺序在动态布局 文章。

生命周期限制

由于它们实例化较晚,在页面呈现期间,部分组件的生命周期存在一些限制。它们不遵循标准执行过程,如布局执行生命周期.应注意以下限制:

  1. AJAX 事件未注册,将无法正常运行。
  2. 生命周期函数不能返回任何值。
  3. 常规 POST 表单处理将在呈现部分时发生。

通常,partials 中的组件使用是为基本组件设计的,这些组件无需太多处理即可呈现简单的标记,例如Like 或者Tweet 按钮。

NOTE: 如果您希望在存在于部分中的组件中使用 AJAX 事件,作为解决方法,您可以将组件添加到使用部分的页面或布局。该组件的实例将能够处理在部分中发出的 AJAX 请求。请注意,AJAX 请求将使用页面或布局中组件的配置,因此请确保此设置中组件的所有实例都具有相同的配置。

豫ICP备18041297号-2