gpt4 book ai didi

twig - 将上下文 html 包裹在特定的 Twig 变量 {{ product.name }}

转载 作者:行者123 更新时间:2023-12-04 15:20:22 28 4
gpt4 key购买 nike

我想自动包装一些 html,当我在我的 twig 模板中调用 <span data-id=".."> 时,可以说 {{ product.name }}

因此,当在 Twig 模板中使用 {{ product.name }} 时,我希望输出为: <span data-type="product" data-id="8" data-prop="name">My product name</span> 。我不能使用 Twig 过滤器或宏,因为我确实需要模板语法为 {{ product.name }} ,因此最终用户(模板设计者)不必关心它。

我需要这个的原因是因为我正在为 Twig 模板构建一个页面编辑工具,所以我需要从 HTML 中了解这些变量的上下文。

我试图覆盖 Compiler 使用的 Twig_Environment,但我似乎无法更改 twig 变量节点的输出。

我怎样才能做到这一点?

编辑

我想提一下,我需要这个来使用 {{ product.name }} 语法,因为其他设计人员将在 Symfony 2 之外使用这些模板。我想让几乎所有的 twig 变量在前端都可编辑,因此带有过滤器或宏的解决方案可以确实有效,但它破坏了我正在编写的平台的可用性和可读性。目前 twig 中没有公共(public) API 可以实现我想要的,这就是我摆弄 twig 编译器的原因。我没有必要的 Twig 内部知识来实现​​这一点。如果有人能指出我的方向,那就太好了!

更新 2

我找到了一个可以实现我想要的地方。每个 GetAttr 节点都被编译为 $this->getAttribute($someContext, "property") 。所以如果我可以改变编译的 Twig 模板的子类,我就可以实现我想要的。默认情况下,所有 Twig 模板都从 Twig_Template 扩展。我想扩展 this method

如何更改所有已编译 Twig 模板的子类?

更新 3
我找到了一种将我自己的基类用于所有已编译的 Twig 模板的方法。我可以简单地将其设置为 twig 环境中的一个选项,请参阅 this link 。我希望明天让它工作,我会发布一个关于我如何一起解决它的正确答案。不确定我将如何处理转义,因为这将在调用 $this->getAttribute() 之后发生。

最佳答案

我认为 macros是这类包装的最佳人选。

例如:

主要的.twig

{% import "macros.twig" as macros %}

{{ macros.display_product(product) }}

宏.twig
{% macro display_product(product) %}

<span data-id="{{ product.id }}" data-prop="name">{{ product.name }}</span>

{% endmacro %}

语境
product:
id: 8
name: My Georgeous Product

结果
<span data-id="8" data-prop="name">My Georgeous Product</span>

fiddle

关于twig - 将上下文 html 包裹在特定的 Twig 变量 {{ product.name }},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34202813/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com