我是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)
任何帮助是极大的赞赏.
我在SDL Tridion 2009和2011中都注意到,在Publication Dialog的工作流选项卡上有一个关联页面模板过程和关联组件模板过程的字段.
这是否意味着模板/代码更改可以在生产中进行并通过工作流程发布?这是一个好习惯吗?如果是这种情况,为什么他们没有模板构建块的工作流程过程关联?
我们有一个应用程序,它通过发布动态组件表示动态生成菜单.menu.xml由基于Structure组的组件模板写出,这个组件模板通过事件系统触发,每当结构组发布时发表.
这个设置工作正常,直到Tridion 2011从Tridion 2009升级.但是自升级以来,菜单不会动态发布,并且每次结构组发生更改时都需要重新发布菜单组件模板.我们检查了事件系统,一切都很好.此外,这种菜单组件模板的重新发布会触发一些其他页面菜单中的问题.
在进行一些调试时(我们使组件模板写出了它正在处理的pageURI),我们发现正在写出的页面URI是错误的.
以下是采取的步骤和得出的结论:
所有错误的页面都已经过检查; DCP标记在JSP代码中设置了正确的属性
其他TRACE语句已添加到Tridion标记库中,这证实了以下内容:
使用提供的变量正确转换了XSLT
通过将XSLT属性写出到HTML,我们看到XSLT处理器正在提供错误的参数.
因此,我可以安全地得出结论,该问题已被隔离到以下事件中; 正在使用不正确的页面ID调用XSL处理器.最可能的原因是由于动态组件表示(DCP)java代码中的并发问题,DCP被群集并且开始混淆哪个页面正在使用当前对象.
如果是这种情况,可以采取哪些措施来纠正它.
任何信息都会有帮助.提前致谢!
问候,
Keirthana TS
2013年1月22日更新:
在更多调试中,我们发现此问题在Presentation端(我们的演示服务器)上重复出现,并且事件系统与页面上出现的错误菜单无关.
也就是说,当我们查看从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" />
Run Code Online (Sandbox Code Playgroud)
但是,当我们查看网页的来源时,我们发现页面URI(我们将页面URI写入html页面)搞砸了如下:
<div id="middle" class="rightcolumn">
Run Code Online (Sandbox Code Playgroud)
生成面包屑我们得到一个不同的pageURI而不是正确的.
基于一个相当简单的查询,我在Broker加载动态组件演示时遇到了问题,如下所示,我试图根据被特定关键字标记来加载Component:
private string GetComponentPresentations()
{
Logger.Log.Info("Entered GetComponentPresentations");
var publicationCriteria = new PublicationCriteria(_publicationId);
int schemaId = int.Parse(SchemaId.Split('-')[1]);
// Is it the correct content type (Schema)
var isSpecifedSchema = new ItemSchemaCriteria(schemaId);
// Type of the item is 16 (Component).
var isComponent = new ItemTypeCriteria(16);
// All of the above conditions must be true
Criteria isCorrectComponent = CriteriaFactory.And(isSpecifedSchema, isComponent);
var publicationAndIsComponent = CriteriaFactory.And(publicationCriteria, isCorrectComponent);
//Only get components tagged with the specified keyword
var keywordCriteria = new KeywordCriteria(_productsCategoryTcmId, ProductFilter, Criteria.Equal);
//Only get Components of …
Run Code Online (Sandbox Code Playgroud) 我是一名不时使用Tridion的前端开发人员(技术水平不是很高).我正在寻找一种方法来更改Tridion 2009富文本架构字段中的文档类型,以允许我使用数据属性(对于工具提示弹出窗口).目前,富文本字段设置为Strict或Transitional.我需要将它设置为HTML5(我知道这可以在2011年进行一些更改.我不确定哪些更改.)因为它代表数据属性在这些模式中的任何一种模式下默认情况下被剥离.选择HTML5可以解决此问题.
任何帮助将不胜感激.
我正在尝试使用Tridion的ContentManagment API来检索分类法类别和关键字,但我遇到了Access denied错误.
我有以下方法:
public Dictionary<string, string> GetKeywords(string tcmUri)
{
var result = new Dictionary<string, string>();
try
{
// _settings.ImpersonationUser = "MYDOMAIN/myusername"
using (var session = new Session(_settings.ImpersonationUser))
{
var category = new Category(new TcmUri(tcmUri), session);
var keywords = category.GetKeywords(new Filter());
if (keywords != null && keywords.Count > 0)
{
foreach (var keyword in keywords)
{
result.Add(keyword.Id.ToString(), keyword.Title);
}
}
}
}
catch (Exception ex)
{
Logger.Log.Error(
"Failed to retrieve keywords for '{0}'.".FormatWith(tcmUri), ex);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我加入的用户可以_settings.ImpersonationUser …
这是(受限制的)Tridion论坛中关于无法删除结构组的问题的重复.但是,由于报告问题的人没有得到正确的答案或解决方案,我在这里重新询问.
我被一个结构组困住了,我也无法删除.它没有本地化,只有蓝色印刷到另一个出版物,并且没有任何页面.内容已经从一个演示环境中迁移出来,也许某个旧目标卡在了某个地方?
不能直接在数据库中删除它.还有其他方法吗?
在Tridion中,我有一个附加组件的页面,该页面有一个文本字段,其中有一个iframe
标签<iframe src="http://mysite.com/l/5042/2012-06-21/9pb4y" width="100%" height="500" frameborder="0" style="border: 0" > </iframe>
.我确保此标记在处理时保持原样C# & DWT template building blocks
.但是在页面发布时,在页面源中,标签会更改为<iframe src="http://mysite.com/l/5042/2012-06-21/9pb4y" width="100%" height="500" frameborder="0" style="border: 0" />
.因此,页面源不会在iframe
标记后显示任何内容.因此,在包含iframe
标记的组件之后附加到页面的任何组件都不会显示在页面上.知道为什么结束标签</iframe>
被自闭标签取代了/>
吗?
有人可以就如何做到这一点给出一些想法吗?这可能非常简单和基础,但我无法弄清楚这一点.
这是我的要求.
我有一个带有子关键字B的类别A,B有另一个子关键字C.
我希望在我的组件模板中获取所选关键字的确切路径,例如,如果用户选择关键字C,我需要带有路径的值,如A\B\C而不仅仅是C.但是Tridion总是给我值作为C而不是A\B\C.组件模式使用"树"视图来选择关键字.
我应该编写Dreamweaver自定义函数来处理这个吗?或者tridion为此提供了一些处理程序?
任何帮助将受到高度赞赏.谢谢!
谢谢,KK
我们创建了一个基于HTML5的新网站.使用<header>,<nav>,<section>等元素...
这是Tridion 2009 SP1中非常简单的实现.这意味着该网站的大部分内容都不是动态的,而是由Tridion Templating构建的.其中一个好处是内容管理员可以使用预览功能.
但是,由于内容管理器仅限于使用IE8,我们必须使用类似Modernizr.js的内容来正确格式化HTML.
这是有趣的结束......在网站本身工作正常,但在Tridion预览屏幕中没有.它几乎似乎没有拿起Javascript.
任何想法,除了创建不同的预览HTML和CSS?