Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为SDL Tridion中的不同页面创建导航菜单?_Tridion_Tridion 2011 - Fatal编程技术网

如何为SDL Tridion中的不同页面创建导航菜单?

如何为SDL Tridion中的不同页面创建导航菜单?,tridion,tridion-2011,Tridion,Tridion 2011,我已经为所有这些类别创建了不同的页面:书籍、手机、comp等。现在我想在所有页面中放置这种类型的导航菜单(如图所示),打开页面应突出显示相应的菜单链接 我应该创建一个包含文本和链接的模式,并使其具有多值性吗?然后我创建一个组件,最后在所有页面中呈现它们 如果没有,请建议其他更好的方法 在Tridion中生成任何导航的最常见方法是根据结构组和页面在C#模板中生成导航 例如,可以通过以下方式从模板(C#片段或实现ITemplate的类)中轻松生成面包屑痕迹: var pageDocument=pac

我已经为所有这些类别创建了不同的页面:书籍、手机、comp等。现在我想在所有页面中放置这种类型的导航菜单(如图所示),打开页面应突出显示相应的菜单链接

我应该创建一个包含文本和链接的模式,并使其具有多值性吗?然后我创建一个组件,最后在所有页面中呈现它们

如果没有,请建议其他更好的方法


在Tridion中生成任何导航的最常见方法是根据结构组和页面在C#模板中生成导航

例如,可以通过以下方式从模板(C#片段或实现
ITemplate
的类)中轻松生成面包屑痕迹:

var pageDocument=package.GetByType(ContentType.Page).GetAsXmlDocument();
var current=新页面(pageDocument.DocumentElement,engine.GetSession());
var breadcrumb=页面标题;
while(current.OrganizationalItem!=null)
{
current=current.OrganizationalItem;
面包屑=当前。标题+“>”+面包屑;
}
package.PushItem(“面包屑”,
package.CreateStringItem(ContentType.Text,breadcrumb));
上面的片段实际上只展示了如何向上导航结构组的层次结构。您仍然需要将每个结构组作为链接,可能需要查看每个
StructureGroup
PublishUrl
属性

我知道你不是在问面包屑痕迹,你的看起来更像左导航。但所有导航元素的方法都是类似的:使用ITemplate中的TOM.NET遍历相关页面和结构组,并由此生成导航HTML

要获取当前StructureGroup中所有页面的列表(并标记当前页面),我希望如下所示:

var pageDocument=package.GetByType(ContentType.Page).GetAsXmlDocument();
var current=新页面(pageDocument.DocumentElement,engine.GetSession());
var sg=(StructureGroup)page.OrganizationalItem;
字符串结果=“
    ”; foreach(sg.GetItems()中的变量页) { 结果+=(page.Id!=current.Id)?“
  • ”:“
  • ”; 结果+=页面标题; 结果+=“
  • ”; } 结果+=“
”; package.PushItem(“兄弟”,package.CreateHtmlItem(结果));

请看。这更接近于您最终需要的代码,但当然需要更多的代码(太多了,无法在这里复制)。Albert还分享了一些。如果您使用ASPX作为页面类型,下面介绍其他导航逻辑:

  • 创建一个包含重要页面信息(ID、路径、标题…)的导航xml(包含所有页面)

  • 创建将生成面包屑或任何其他导航的ascx控件。As参数控件应检索当前页面ID

  • 更改页面DWT(放置ascx控件)
  • 这样可以减少呈现(发布)时间,导航将在页面加载时呈现。不幸的是,这样会增加页面加载时间。这取决于你的需要什么是更适合你的解决方案。刷新导航XML是这种方法的问题之一