futureplc / twig-stack-extension
为 Twig 添加 `push` 和 `stack` 标签,以更好地管理模板中的资源。
v1.0.1
2024-09-02 13:25 UTC
Requires
- php: ^8.3
- twig/twig: ^3.9.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.21.1
- phpunit/phpunit: ^11.3.1
README
此 Twig 扩展允许您将子视图中的内容“推”入一个命名的“堆栈”,该堆栈可以在另一个视图或布局中渲染。这对于许多场景都非常适用,例如推送组件使用的脚本或样式。
此插件深受 filhocodes/twig-stack-extension 的启发,并重构以与 Twig ^3.9.0
兼容。
安装
您可以通过 Composer 安装此包
composer require futureplc/twig-stack-extension
在您的项目中设置
首先,将扩展添加到 Twig 实例
$twig->addExtension(new \Future\TwigStackExtension\StackExtension());
接下来,我们需要修改 Twig 渲染的内容输出,以确保堆栈正确地注入到正确的地方。
实现此目的的一种方法是通过包提供的自定义 Environment
类。
- use Twig\Environment; + use Future\TwigStackExtension\Environment; // ... $twig = new Environment($loader);
如果您不想覆盖您的 Environment
,您可以手动在渲染输出上调用扩展。
$result = $twig->render('view.html.twig'); $result = $twig ->getExtension(\Future\TwigStackExtension\StackExtension::class) ->getStackManager() ->replaceStackPlaceholdersWithStackContent($result);
一切设置完毕,准备使用。
使用方法
在 Twig 模板中,您将拥有三个新标签可供使用,{% push %}
和 {% pushonce %}
用于将内容推送到一个命名的堆栈,以及 {% stack %}
用于渲染命名的堆栈。
向堆栈推送
将任何您想要“推”入堆栈的内容包装起来,每次解析此部分 Twig 模板时都会这样做。
<!-- partial.twig --> {% push 'scripts' %} <script>console.log('Pushed script executed')</script> {% endpush %}
使用 {% push %}
将内容推送到堆栈 每次 调用时。
如果您只想在代码首次引用时推送,例如,包含组件所需的库,您可以使用 {% pushonce %}
标签。
<!-- components/datepicker.twig --> <input type="text" class="datepicker" /> {% pushonce 'scripts' %} <script src="/path/to/datepicker-lib.js" /> {% endpushonce %}
渲染堆栈
您可以使用 {% stack %}
标签来渲染堆栈的内容。
<!-- layout.twig -->
<html>
<head>...</head>
<body>
...
{% stack 'scripts' %}
</body>
</html>
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近的变化。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请参阅 我们的安全策略 了解如何报告安全漏洞。
致谢
许可
MIT 许可证 (MIT)。请参阅 许可文件 了解更多信息。