phive/twig-extensions-deferred

此包已被放弃,不再维护。作者建议使用 rybakit/twig-deferred-extension 包。

一个允许延迟块渲染的Twig扩展

v2.0.3 2020-06-03 12:45 UTC

This package is auto-updated.

Last update: 2022-12-16 20:34:47 UTC


README

Build Status Scrutinizer Code Quality Mentioned in Awesome Twig

一个允许延迟块渲染的Twig 2扩展。

如果您需要Twig 3+的支持,请查看此 仓库

安装

安装此扩展的推荐方式是通过 Composer

composer require phive/twig-extensions-deferred

初始化

use Phive\Twig\Extensions\Deferred\DeferredExtension;
use Twig\Environment;

...

$twig = new Environment($loader);
$twig->addExtension(new DeferredExtension());

简单示例

{% block foo deferred %}
    {{ bar }}
{% endblock %}

{% set bar = 'bar' %}

foo 块将输出 "bar"。

高级示例

仅为了示例目的,首先创建一个 全局Twig变量

use Twig\Environment;

...

$twig = new Environment($loader);
$twig->addGlobal('assets', new ArrayObject());

然后构建以下一系列模板

{# layout.html.twig #}
<!DOCTYPE html>
<html>
    <head>
        ...
    </head>
    <body>
        {% block content '' %}

        {{ assets.append('/js/layout-header.js') }}

        {% block javascripts deferred %}
            {% for asset in assets %}
                <script src="{{ asset }}"></script>
            {% endfor %}
        {% endblock %}

        {{ assets.append('/js/layout-footer.js') }}
    </body>
</html>


{# page.html.twig #}
{% extends "layout.html.twig" %}

{% block content %}
    {{ assets.append('/js/page-header.js') }}

    {% if foo is defined %}
        {{ include("subpage1.html.twig") }}
    {% else %}
        {{ include("subpage2.html.twig") }}
    {% endif %}

    {{ assets.append('/js/page-footer.js') }}
{% endblock %}


{# subpage1.html.twig #}
{{ assets.append('/js/subpage1.js') }}


{# subpage2.html.twig #}
{{ assets.append('/js/subpage2.js') }}

生成的HTML将是以下内容

<!DOCTYPE html>
<html>
    <head>
        ...
    </head>
    <body>
        <script src="/js/layout-header.js"></script>
        <script src="/js/page-header.js"></script>
        <script src="/js/subpage2.js"></script>
        <script src="/js/page-footer.js"></script>
        <script src="/js/layout-footer.js"></script>
    </body>
</html>

块覆盖

{# index.twig #}
{% extends "base.twig" %}
{% block foo %}foo is not deferred anymore{% endblock %}
{% block bar deferred %}bar is deferred now{% endblock %}

{# base.twig #}
{% block foo deferred %}foo is deferred{% endblock %}
{% block bar %}bar is not deferred{% endblock %}

许可证

延迟Twig扩展在MIT许可证下发布。有关详细信息,请参阅捆绑的 LICENSE 文件。