phive / twig-extensions-deferred
v2.0.3
2020-06-03 12:45 UTC
Requires
- twig/twig: ^2.8
Requires (Dev)
- phpunit/phpunit: ^6.5
README
一个允许延迟块渲染的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 文件。