4

假设我们必须在自定义部署程序中访问已发布页面的内容。这部分代码位于扩展 PageDeploy 类的 CustomModule 中的 processPage 方法中。

这样我将获得正在发布的页面,但该页面的内容不会被转换(不会呈现该页面中的组件)。

public void processPage(Page page, File pageFile) throws ProcessingException {
    File file = new File(pageFile.toString());
}

如果我知道我可以通过将 Cleanup 更改为 false 来禁用 cd_deployer.conf.xml 中的 TransportPackages 的清理:<WorkFolder Location="C:\tridion\work" Cleanup="false"/>, 我看到 Tridion 生成了我的页面的两个版本:

  1. root\page.html(具有未渲染内容,路径为 pageFile.ToString())
  2. root\transformed\page.html (具有完整的内容 - 我想要的内容)

为什么当我使用转换后的页面文件路径创建新文件并阅读它时,我得到的 html 代码的内容比原始 html 还要少?这是因为在此阶段的部署页面仍未呈现和完成还是...?

谢谢!

4

1 回答 1

3

您的页面是否使用动态组件演示?如果是这样,则发布和部署的页面级 HTML 将仅包含组件表示的“包含指令”

<tcdl:ComponentPresentation ... />

在部署期间发生的唯一事情是,在发布/传输期间使用的“与技术无关”的语言被翻译成 JSP 标记或 ASP.NET 服务器控件包含,在这两种情况下,它通常翻译成以tridion:ComponentPresentation.

动态组件表示本身的 HTML 片段将单独发布,并作为单独的项目存储在配置的存储中。

完整的 HTML 将仅在请求页面时(用于为访问者提供服务)组成。在那个阶段,将调用 JSP 标记库或 ASP.NET 服务器控件,从存储中读取组件表示的 HTML 片段并将其注入页面的 HTML“线框”。

有了这些知识,它确实解释了为什么在 Deployer 扩展中找不到动态组件表示的 HTML 片段:将 DCP 片段合并到 Page shell 仅在请求页面时发生,而不是在部署页面时发生。

于 2012-07-26T14:18:27.017 回答