futureplc/twig-stack-extension

为 Twig 添加 `push` 和 `stack` 标签,以更好地管理模板中的资源。

v1.0.1 2024-09-02 13:25 UTC

This package is auto-updated.

Last update: 2024-09-02 13:25:53 UTC


README

Latest Version on Packagist Tests Total Downloads

此 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)。请参阅 许可文件 了解更多信息。