8

我们有一个应用程序,它具有通过发布动态组件表示动态生成的菜单。menu.xml 由基于结构组的组件模板写出,并且该组件模板通过事件系统触发,以在结构组时发布已发布。

在从 Tridion 2009 升级 Tridion 2011 之前,此设置运行良好。但自升级以来,菜单不会动态发布,并且每次结构组发生更改时都需要重新发布菜单组件模板。我们检查了事件系统,那里一切都很好。此外,重新发布菜单组件模板会在其他一些页面菜单中引发问题。

在进行一些调试时(我们让组件模板随时写出它正在处理的 pageURI),我们发现正在写出的页面 URI 是错误的。

以下是采取的步骤和得出的结论:

  • 已检查所有错误页面;DCP 标记在 JSP 代码中设置了正确的属性

  • Tridion 标签库中添加了额外的 TRACE 语句,这证实了以下几点:

  • XSLT 已从文件系统中正确检索
  • 已从缓存中正确检索缓存的菜单
  • XSLT 已使用提供的变量正确转换

  • 通过将 XSLT 属性写入 HTML,我们看到 XSLT 处理器提供了错误的参数。

因此,我可以安全地得出结论,该问题已被隔离到以下事件;正在使用不正确的页面 ID 调用 XSL 处理器。最可能的原因是动态组件表示 (DCP) Java 代码中的并发问题,其中 DCP 蜂拥而至并开始混淆哪个页面正在使用当前对象。

如果是这种情况,可以做些什么来纠正它。

任何信息都会有所帮助。提前致谢!

问候,

基尔塔娜 TS

2013 年 1 月 22 日更新:

在更多的调试中,我们发现这个问题在演示端(我们的演示服务器)反复出现,并且事件系统与页面上出现的错误菜单无关。

也就是说,当我们查看从 Tridion 发布的 jsp 页面时,我们有顶部菜单、左侧菜单和面包屑的正确页面 URI:

<tridion:ComponentPresentation pageURI="tcm:57-186286-64" componentURI="tcm:57-103196" templateURI="tcm:57-23654-32"/><!-- privat-->
<div id="nav"><div class="wrapper">
<tridion:ComponentPresentation pageURI="tcm:57-186286-64" componentURI="tcm:57-23638" templateURI="tcm:57-23656-32" />
</div></div>
<div id="page" class="clear ">
<div id="content" class="clear">
<tridion:ComponentPresentation pageURI="tcm:57-186286-64" componentURI="tcm:57-23639" templateURI="tcm:57-23656-32" />
<div id="middle" class="rightcolumn">
<tridion:ComponentPresentation pageURI="tcm:57-186286-64" componentURI="tcm:57-23636" templateURI="tcm:57-23656-32" />

但是,当我们查看网页的源代码时,我们发现页面 URI(我们将页面 URI 写成 html 页面)乱七八糟,如下所示:

<div id="middle" class="rightcolumn">

它生成面包屑,我们得到一个不同的 pageURI 而不是正确的。

4

1 回答 1

3

一些与发布相关的遗留 (VB) 事件在 Tridion 2011 中无法开箱即用。这里有一个遗留事件适配器:http: //sdltridionworld.com/community/2011_extensions/LegacyEventAdapter.aspx

于 2013-01-15T08:11:48.327 回答