【问题标题】:Add property to an existing object in twig将属性添加到树枝中的现有对象
【发布时间】:2016-06-29 15:05:58
【问题描述】:

我即将在grav 中构建一个modular page 主题(它使用twig 作为模板引擎)。

默认情况下,模块化主题至少包含两个 twig 模板文件:一个提供包含页眉的页面框架,另一个提供内容模块的标记。 Grav 的standard theme 提供了这些模板的示例:

  1. modular page frame example
  2. module example

如您所见,模块(示例)没有headjavascripts 块来将javascripts 添加到html 头部。 (这甚至是不可能的,因为典型的模块化页面由多个模块组成。因此,如果两个不同的模块尝试更改 javascripts 块,最后一个模块将覆盖第一个模块所做的更改,这将导致意外结果)。

但是,碰巧我需要从一个模块中将一些 javascript 代码添加到我的页面头部。我想到了一个解决方案,并有想法将 javascript 代码作为属性添加到存在“站点范围”的对象中,即pages object

这引出了我的问题:

如何使用 twig 语法向现有对象添加属性?

除此之外,我还想知道您是否能想到这个解决方案可能不起作用的任何原因。但是如果你帮我语法,我也可以试一试......

【问题讨论】:

    标签: php object inheritance twig grav


    【解决方案1】:

    不应在 Twig 模板中操作对象的状态。视图应该输出已经提供给它的数据。

    尝试更改 javascripts 块,最后一个会覆盖第一个所做的更改,这会导致意外结果

    请参阅此答案here,了解如何让多个块将内容附加到一个块而不是覆盖它。您可以简单地拥有一个“extra_scripts”块或类似的东西,然后根据描述的链接将特定模块的任何所需的javascript附加到该块。本质上,您需要使用{{ parent() }} 来确保包含来自父级的内容

    【讨论】:

    • 首先:感谢您的回答。但是,恐怕无法使用{{ parent() }} 附加块,因为应该附加的块不是来自父级。我尝试用草图twiddla.com/xa84jm 来解释它。但即使它可以工作,另一个(更重要的)问题是,模块模板根本不从页面框架继承,因此理论上甚至不可能从父级继承。
    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    相关资源
    最近更新 更多