我目前正在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
函数不为我这样做?
有什么东西我应该做的不同或者这是不可能的我正在实施这个?
我已确认tridion
tagprefix已在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(...)
通话中.错误是: …
我有一个场景,我发布了几千个使用特定类别/关键字分类的组件演示文稿,但组件也有自定义元数据字段,用于定义前n个.将显示.基本上,我需要根据关键字过滤一组组件,根据自定义元数据对它们进行排序,然后只选择前N个.
我理解如何列出项目并创建基本过滤器(从API中的过滤器项列表),但我需要过滤元数据字段(例如,具有最新元数据"priorityDate" 的三个项目).
从我正在阅读的内容中,我希望从分类搜索中获取所有记录(使用TaxonomyKeywordCriteria),然后手动(对QueryRunner执行SQL)检索所有组件的元数据以进行过滤/排序.
我一定肯定错过了一些东西(它感觉不对,有1/2 API调用然后在页面SQL脚本中)...如果没有,QueryRunner查询将被缓存在Taxonomy Query.executeQuery()的结果旁边
示例代码:
ItemTypeCriteria isComponent = new ItemTypeCriteria(16);
TaxonomyKeywordCriteria taxonomyKeywordCriteria = new TaxonomyKeywordCriteria(taxURI, taxKeywordURI, true);
Criteria[] allCriteria = {isComponent, isTDIPublication, isArticle, taxonomyKeywordCriteria};
AndCriteria andCriteria = CriteriaFactory.And(allCriteria);
Query query = new Query();
query.setCriteria(andCriteria);
Run Code Online (Sandbox Code Playgroud) 将多值Tridion文本字段拆分为逗号分隔字符串的最快方法是什么?在我的情况下,我使用C#,但我想其他任何例子也是受欢迎的.这似乎是丑陋而冗长的方式:
var multiTextField = fields["multiTextField"] as TextField;
string multiCommaField = String.Empty;
for (int i = 0; i < multiTextField.Values.Count; i++)
{
multiCommaField += multiTextField.Values[i].ToString() + ",";
}
Run Code Online (Sandbox Code Playgroud)
编辑:我使用的是.NET 3.5和Tridion 2009 SP1
我们使用RenderComponentPresentation
(在Tridion 2009上)来呈现内部和外部链接,以便代码库只在一个Dreamweaver模板中.如果我们可以通过一个可选的CSS类来渲染链接,那将会很有帮助.
有什么想法可以做到这一点?
在复合模板中发布/渲染某段代码时,其中一个环境出现了突然问题.它是一个DTAP环境,问题只发生在生产环境中(一如既往;-),其中有两台CMS机器和两台发布者.所有都表现出相同的行为.
导致问题的代码是:
StructureGroup SG = (StructureGroup)engine.GetObject("/webdav/pub/root/etc/etc...");
Run Code Online (Sandbox Code Playgroud)
"模板"构建器中的错误是:
System.Net.WebException: The underlying connection was closed: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 10.77.66.136:80
bij System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
bij System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
bij System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
--- Einde …
Run Code Online (Sandbox Code Playgroud) 真的很简单的问题,但我似乎无法让它正常工作.
我有一个组件,其中有一些XSLT(用于导航).它通过XSLT TBB使用XSLT Mediator发布.
在发布< 变为<,并打破xslt ...
组件内容(纯文本字段)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:tcm="http://www.tridion.com/ContentManager/5.0" exclude-result-prefixes="tcm xsl xs xlink tridion">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:apply-templates select="/node/node[@type='folder')='0' and position() < 3]">
<xsl:sort select="sortnum"/>
</xsl:apply-templates>
<xsl:template match="node">
<xsl:text>Lorem Ipsum</xsl:text>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
XLT CT TBB输出此组件:
<xsl:stylesheet version="1.0" xmlns:tcm="http://www.tridion.com/ContentManager/5.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tridion="http://www.tridion.com/ContentDelivery/5.3/TCDL" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:helper="http://www.tridion.com/xslthelper" xmlns:systeemcode="http://www.indivirtual.nl/SysteemCode" xmlns:xhtml="http://www.w3.org/1999/xhtml" exclude-result-prefixes="tcm xsl tridion xlink systeemcode xslthelper helper xhtml">
<xsl:output method="text" omit-xml-declaration="yes" indent="yes" encoding="utf-8" standalone="no"/>
<xsl:variable name="content" select="/tcm:Component/tcm:Data/tcm:Content/systeemcode:SysteemCode"/>
<xsl:template match="/">
<xsl:value-of disable-output-escaping="yes" select="helper:HtmlDecode($content/systeemcode:code)"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
输出CP的XSLT页面TBB: …
使用以下功能的任何人都遇到异
tdse.GetObject(tmpFolderWebDavURL, EnumOpenMode.OpenModeView, null,
XMLReadFilter.XMLReadAll) as Folder;
Run Code Online (Sandbox Code Playgroud)
似乎webdav的最后一段包含一个点,然后方法抛出和异常.
例如
tmpFolderWebDavURL = "/webdav/test_publication/2.2 folder name"
- 抛出异常失败
tmpFolderWebDavURL = "/webdav/test_publication/22 folder name"
- 工作
tmpFolderWebDavURL = "/webdav/test_publication/2.2 folder name/sub_folder"
- 工作
例外
<?xml version="1.0"?>
<tcm:Error xmlns:tcm="http://www.tridion.com/ContentManager/5.0" ErrorCode="80040200" Category="4" Source="Kernel" Severity="2">
<tcm:Line ErrorCode="80040200" Cause="false" MessageID="15301">
<![CDATA[Unable to get TOM object for URI: /webdav/TPMG Medical Library Content/Building Blocks/Content Live/2.2 People Lists]]>
<tcm:Token>/webdav/TPMG Medical Library Content/Building Blocks/Content Live/2.2 People Lists</tcm:Token>
</tcm:Line>
<tcm:Line ErrorCode="80040200" Cause="true" MessageID="15748">
<![CDATA[Unable to map all paths to URIs.]]>
</tcm:Line> …
Run Code Online (Sandbox Code Playgroud) 有没有人对确认分类法缓存功能的简单但有效的方法有任何建议.我正在开发一个系统,其中cd_broker_config(Tridion 2009)将分类法缓存注释掉了.
我们现在已经取消注释并重新启动了部署服务,但有没有办法可以100%确认缓存现在正在进行?使用ORACLE 11.2.0.1
我正在使用.Net dll Newtonsoft.Json in my C# TBB
来处理组件并生成Json数据.我已经添加了这个dll GAC[Global Assembly Cache]
,它也可以运行.但有时它不起作用,我发布时出现以下错误:
JScriptException: Expression 'RenderComponentPresentation()' had error 'Could not load file or assembly 'Newtonsoft.Json, Version=4.0.5.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.'
但是当我在Tridion中预览页面时它运行正常.要解决此问题,我们重新启动Tridion Services
,重新启动后,我们发布了一个很好的页面.但是这个问题一再出现.有没有办法永久解决这个问题?
最近,当我已经在发布过程中再次发布同一页面时,我可以重现问题.第二次发布尝试返回上述错误,但第二次发布尝试失败后第一次发布尝试完成并返回Success
.任何想法为什么这种奇怪的行为.
有人知道复合模板中是否可以使用包中的字符串项并像执行Dreamweaver模板一样执行它?你是否将相同的方法应用于其他调解员(如剃刀)?
谢谢马克
tridion ×10
tridion2009 ×10
taxonomy ×2
.net ×1
.net-3.5 ×1
caching ×1
filtering ×1
json.net ×1
tridion-2011 ×1