我目前正在 Tridion 2009 SP1 中实现功能,用户可以使用过滤器来查询代理以查找匹配标准,然后将组件演示文稿返回到页面。返回的每个项目都包含一个组件链接。
最初动态 CP 作为 HTML 片段存储在代理数据库中,但发现当以这种方式存储 CP 时,Tridion 会从内容中剥离组件链接并在 HTML 中留下空白区域。
然后我切换了设置,以便动态 CP 现在作为 ascx 控件存储在文件存储中。使用此设置时,将<tridion:ComponentLink ... />
成功存储在 ascx 文件中。
但是,当我将结果呈现到屏幕上时,组件链接没有被解析,我只剩下<tridion:ComponentLink ... />
我的结果源。
目前,我正在使用该GetComponentPresentation
方法返回 CP 内容,然后将其添加到列表中,然后再绑定到中继器进行显示。
总结代码如下:
ComponentPresentationFactory CPFactory = new ComponentPresentationFactory();
List<string> componentPresentations = new List<string>();
for (int i = 0; i < tbl.Rows.Count; i++)
{
ComponentPresentation cp = CPFactory.GetComponentPresentation(
tbl.Rows[i][0].ToString(),
strComponentTemplate.ToString());
if (cp != null)
{
componentPresentations.Add(cp.Content);
}
}
此列表以通常的方式绑定到转发器:
rptOffer.DataSource = componentPresentations;
rptOffer.DataBind();
有谁知道我如何强制解决组件链接以及为什么该GetComponentPresentation
功能不为我执行此操作?
有什么我应该做的不同的事情,或者这在我实现这个的方式上是不可能的吗?
我已确认tridion
tagprefix 已在 web.config 中正确注册。
我对 Tridion 还很陌生,因此非常感谢任何帮助!
更新
我试图实施 Will 的建议,因为它似乎是最适合我的方案的解决方案,但是当我尝试将 Will 的建议与下面的代码一起使用时,我收到了一个(相当平淡的)错误:
ComponentPresentationAssembler cpa = new ComponentPresentationAssembler("tcm:35-62652-64");
string content = cpa.GetContent(tbl.Rows[i][0].ToString(), strComponentTemplate.ToString());
实际上有 2 个错误(看似)随机发生,但总是在cpa.GetContent(...)
调用时发生。错误是:
Exception occurred during configuration callback
OR
com.tridion.dcp.ComponentPresentationFactory
我似乎无法弄清楚为什么在我运行代码的时间之间错误会发生变化。即使没有更改代码,错误也会发生变化。
有人知道我在这里想念什么吗?我认为这将是与代理存储等的连接问题,但后来我记得当我使用ComponentPresentationFactory
该类时该部分正在工作。
如果有帮助,作为 ascx 存储在文件存储中的 DCP 包含以下 HTML:
<div class="content-list-item offer redesign noImage">
<h2><span>Mike Offer 01/06 - 10/06 & 20/06 - 10/07</span> Exp May 20th</h2>
<div class="content-list-item-text">
<p>Body Text</p>
<div class="input-btn burgundy">
<tridion:ComponentLink runat="server" PageURI="tcm:0-0-0" ComponentURI="tcm:35-31685" TemplateURI="tcm:0-0-0" AddAnchor="false" LinkText="Button Text<span class="rm">: Button Text</span>" LinkAttributes=" alt="Button Text" target="_self" " TextOnFail="true"/>
</div>
<p>Sub Title</p>
</div>
<div class="offers-list">
<ul>
<li>Offer ends: 20 May 2012</li>
<li>Offer available at all hotels</li>
</ul>
</div>
<div class="back-to-top">
<a href="#content">Back to top</a>
</div>
更新 2
感谢 Ryan,我发现我的 DCP (ASCX) 文件没有在 wwwroot 文件夹内的应用程序文件夹中发布,这解决了将<tridion:ComponentLink ... />
标签直接输出到源的问题。它现在正在呈现,但链接仍未解决。<a ... />
标签没有被输出。这就是汇编程序希望进入的地方——一旦我能让它工作。
我已经实现了更多的日志记录和检查,并获得了有关错误的更多信息,这表明我可能缺少 jar 文件或版本不正确:
Exception Details: Java.Lang.ClassNotFoundException: com.tridion.dcp.ComponentPresentationFactory
有趣的是,当我使用ComponentPresentationFactory
该类时,它可以工作(不解析内部链接),但是一旦我使用汇编程序,它就会抛出上述错误。
我还尝试按照 Alvin 的建议将 Page 添加到构造函数,但输出是相同的。