Orchardcms 无法阅读标题部分| Orchard CMS 1.7的标题|
这是参考资料,与我先前的问题有关 我正在尝试阅读零件Orchardcms 无法阅读标题部分| Orchard CMS 1.7的标题|,orchardcms,orchardcms-1.7,orchard-modules,Orchardcms,Orchardcms 1.7,Orchard Modules,这是参考资料,与我先前的问题有关 我正在尝试阅读零件标题部分的标题,如下代码所示: var query = Services.ContentManager.Query("SideBarLinks").List(); foreach (var sideBarLinks in query) { foreach(var part in sideBarLinks.Parts) { if (part is Or
标题部分的标题
,如下代码所示:
var query = Services.ContentManager.Query("SideBarLinks").List();
foreach (var sideBarLinks in query)
{
foreach(var part in sideBarLinks.Parts)
{
if (part is Orchard.Core.Title.Models.TitlePart)
{
// Below Line throws error
//string title = part.Title;
}
}
}
每个ContentPart在orchard中都有一个标题。因此,对于标题部分,我试图阅读标题。还有类似的属性可以访问吗,比如part.Name
还检查了代码,并且有一个公共的标题
属性,如下所示:
并非所有内容类型都附有标题栏。您可以在仪表板中对此进行检查,并查看您的内容类型是否确实附加了标题部分。例如,页面内容类型:
在代码中,如果内容项具有标题部分,则可以这样检查:
var query = Services.ContentManager.Query("SideBarLinks").List();
foreach (var sideBarLinks in query) {
// Cast to TitlePart
var titlePart = sideBarLinks.As<TitlePart>();
var title = titlePart != null ? titlePart.Title : string.Empty;
// Or:
// var title = sideBarLinks.Has<TitlePart>() ? sideBarLinks.As<TitlePart>().Title : string.Empty;
}
这有多重好处。首先,您不必检查标题部分,方法本身会处理这个问题。
另一个优点是,您可以覆盖要显示为标题的内容。假设您有一个电影内容类型,并且希望标题显示为“某些电影标题(2001)”。然后,您只需在自定义部件中实现ITitleAspect:
public class MoviePart : ContentPart<MoviePartRecord>, ITitleAspect {
// Shortcut to get the title
public string MovieTitle {
get { return this.As<TitlePart>().Title }
}
public int ReleaseYear {
get { return Retrieve(x => x.ReleaseYear); }
set { Store(x => x.ReleaseYear, value); }
}
// other properties
// Implement Title from ITitleAspect
public string Title {
get { return string.Format("{0} ({1})", MovieTitle, ReleaseYear); }
}
}
公共类电影部分:内容部分,ITitleAspect{
//获取标题的快捷方式
公共字符串电影{
获取{返回this.As().Title}
}
公共信息发布年{
获取{return Retrieve(x=>x.ReleaseYear);}
设置{Store(x=>x.ReleaseYear,value);}
}
//其他属性
//从ITitleAspect实现标题
公共字符串标题{
获取{return string.Format(“{0}({1})”,MovieTitle,ReleaseYear);}
}
}
此项目的GetItemMetadata(theMovie).DisplayText
将返回格式化的标题 是的,我的自定义内容类型:侧边栏链接附带“标题”部分。你能告诉我元数据在哪里吗?我指的是你使用的DisplayText属性,所以我可以在Orchard CMS中检查这个,就像你在上面提供的截图/顶部图像中列出所有部件和属性一样吗?非常感谢devqon。你提到的所有方法都非常有效。特别感谢您的解释。这确实提供了信息。
public class MoviePart : ContentPart<MoviePartRecord>, ITitleAspect {
// Shortcut to get the title
public string MovieTitle {
get { return this.As<TitlePart>().Title }
}
public int ReleaseYear {
get { return Retrieve(x => x.ReleaseYear); }
set { Store(x => x.ReleaseYear, value); }
}
// other properties
// Implement Title from ITitleAspect
public string Title {
get { return string.Format("{0} ({1})", MovieTitle, ReleaseYear); }
}
}