1

我即将在Grav中构建一个模块化页面主题(它使用twig作为模板引擎)。

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

  1. 模块化页框示例
  2. 模块示例

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

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

这导致了我的问题:

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

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

4

1 回答 1

0

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

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

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

于 2016-06-29T16:47:39.680 回答