Apostrophe-CMS渲染小部件模板

时间:2018-07-07 22:11:29

标签: apostrophe-cms

我一直在研究一种实用程序,用于根据其所在页面更改在其他小部件内显示的小部件。例如,当编辑器位于特殊的“锚定”页面上时,我只希望能够添加特殊的“锚定”窗口小部件,但是他们还需要能够将其添加到我创建的两列窗口小部件中。由于我不希望该选项出现在两列窗口小部件中,除非它们仍位于“锚定”页面上,所以我设置了一个服务,该服务根据窗口小部件和页面信息将窗口小部件选项传递给apos.area。

我遇到的问题是,当我向页面添加窗口小部件时,窗口小部件上的模板代码似乎没有运行。具体来说,我向小部件添加了{{data.page.type}}字符串以进行测试。第一次添加小部件时,如果不重新加载,则不会显示该文本。乍一看,我认为这可能是因为在渲染小部件期间data.page不可用,所以无法查看页面类型。那是正确的吗,除了重写呈现方法以考虑页面之外,还有什么方法可以解决?

谢谢!

1 个答案:

答案 0 :(得分:1)

是问题,是的:render-widget不了解页面。窗口小部件原本是自给自足的,部分是为了使缓存更容易,但是人们希望他们知道该页面的情况比我们预期的要多。

每次调用apos.singleton或apos.area呼叫时,都可以将您真正需要的页面信息作为选项传递给小部件。不要传递整个页面,因为那样会在标记中产生大量JSON。

当然,这是额外的工作,因此不令人满意。因此,考虑使用nunjucks宏,该宏传递替换直接的apos.area和apos.singleton调用所需的内容。

我们正在考虑增加对在小部件中访问data.page的支持。这是一个相当深刻的变化。