【发布时间】:2020-06-30 11:38:06
【问题描述】:
我想渲染一个不在 JCR 存储中的页面。我在文件中有页面结构。我们正在运行 Magnolia 5.6.13,根据 this 可以做到这一点,但我不清楚如何做到这一点。是我必须覆盖的 RenderingModelImpl#getContent 还是我必须覆盖的 AbstractRenderer 类方法? 谢谢, 安娜
【问题讨论】:
标签: magnolia
我想渲染一个不在 JCR 存储中的页面。我在文件中有页面结构。我们正在运行 Magnolia 5.6.13,根据 this 可以做到这一点,但我不清楚如何做到这一点。是我必须覆盖的 RenderingModelImpl#getContent 还是我必须覆盖的 AbstractRenderer 类方法? 谢谢, 安娜
【问题讨论】:
标签: magnolia
您尝试加载/渲染的文件中究竟有什么内容?只是 HTML 或 freemarker 模板或由其他模板语言制作的模板,还是它实际上代表了您通常在 JCR 中仅来自文件而不是来自 JCR 的页面?估计是最后一个了如果是这种情况,并且您想尽可能多地利用 Magnolia 提供的 ootb,您需要覆盖 getContent() 方法,在该方法中加载您的文件并创建 Content 由该方法返回的对象(可能想使用来自magnolia-core-test jar 的MockContent 来测试这个)。基本上将页面的文件表示形式转换为内容。
AbstractRenderer 应仅在您尝试替换渲染引擎生成的模板语言或输出类型时被覆盖,而不是在您尝试为其提供不同的输入时被覆盖。
【讨论】:
javax.jcr.Content 接口,称为MockContent,您可以使用基于文件的页面结构中的信息填充该类。就这样。但是,对于生产用途,您无论如何都希望使用自己的 Content 接口实现,所以如果您不知道在哪里可以找到它以及如何将 magnolia-core-test.jar 添加到您的构建中,那么您可以去提前并自己实现它。