我目前正在Tridion 2009 SP1中实现功能,用户可以利用过滤器来查询代理以匹配条件,然后将组件演示文稿返回到页面.返回的每个项目都包含组件链接.
最初动态CP作为HTML片段存储在代理DB中,但是发现当以这种方式存储CP时,Tridion将从内容中剥离组件链接并在HTML中留下空白.
然后我切换了设置,以便动态CP现在作为ascx控件存储在文件存储中.使用此设置时,<tridion:ComponentLink ... />会成功存储在ascx文件中.
但是,当我将结果呈现到屏幕上时,组件链接没有被解析,而我将留<tridion:ComponentLink ... />在我生成的源中.
目前,我正在使用该GetComponentPresentation方法返回CP内容,然后在绑定到Repeater进行显示之前将其添加到List中.
汇总代码如下:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
此列表以通常的方式绑定到转发器:
rptOffer.DataSource = componentPresentations;
rptOffer.DataBind();
Run Code Online (Sandbox Code Playgroud)
有谁知道我如何强制解决组件链接以及为什么GetComponentPresentation函数不为我这样做?
有什么东西我应该做的不同或者这是不可能的我正在实施这个?
我已确认tridiontagprefix已在web.config中正确注册.
我对Tridion很新,所以非常感谢任何帮助!
UPDATE
我试图实现Will的建议,因为它似乎是我的场景最合适的解决方案,但当我尝试使用Will的建议时,我收到了一个(相当乏味的)错误:
ComponentPresentationAssembler cpa = new ComponentPresentationAssembler("tcm:35-62652-64");
string content = cpa.GetContent(tbl.Rows[i][0].ToString(), strComponentTemplate.ToString());
Run Code Online (Sandbox Code Playgroud)
实际上有2个错误(看似)随机发生但始终在cpa.GetContent(...)通话中.错误是: …
我是Tridion的新手,我必须实现允许内容编辑器创建组件并为其分配多个日期范围(可用日期)的功能.需要从代理查询这些内容以提供搜索功能.
最初,这只需要一个开始和结束日期,因此被实现为单独的元数据字段.
我建议在架构的"可用日期"元数据字段中使用嵌入式架构,以允许分配多个开始日期和结束日期.
但是,由于字段现在允许多个值,因此数据在"KEY_STRING_VALUE"列中以逗号分隔值存储在代理中,而不是"KEY_DATE_VALUE"列中的日期值,因为它只允许单个开始和结束值.
例如.
KEY_NAME | KEY_STRING_VALUE
end_date | 2012-04-30T13:41:00,2012-06-30T13:41:00
start_date | 2012-04-21T13:41:00,2012-06-01T13:41:00
这现在导致我的代理查询问题,因为我不能再使用简单的查询逻辑来检索基于日期搜索所需的项目.
在我开始根据这些来写C#的逻辑来分析这些逗号分隔日期和搜索,我想知道是否有人已经有过类似的要求/经验,并已实现了这个以不同的方式,以减少代码解析所需的量和使用代理查询来完成搜索.
我在Tridion 2009上开发这个,但使用5.3 Broker(由于遗留原因)所以查询当前看起来像这样(对于单个开始/结束日期):
query.SetCustomMetaQuery((KEY_NAME='end_date' AND KEY_DATE_VALUE>'" + startDateStr + "') AND (ITEM_ID IN(SELECT ITEM_ID FROM CUSTOM_META WHERE KEY_NAME='start_date' AND KEY_DATE_VALUE<'" + endDateStr + "')))";
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏.