我有这个内容树:
SiteA
- Home
- Articles
SiteB
- Home
- News
Repository
- article1
- article2
- article3
- ...
- article1000
有没有办法可以从Repository
项中提取任何文章并在SiteA/Article
项目上动态显示?与SiteB/News
相同。
附加问题: 是否可以从父项目库中继承每篇文章的布局?这些文章将通过迁移(我将在下一步工作)添加,一旦项目迁移,重新分配布局将花费太多时间。
答案 0 :(得分:4)
是的,有。根据您的要求,您可以做几件不同的事情。
例如,您可以在SiteA / Article项目上使用MultilistField
,这样您就可以从Repository项目中选择文章。通过将MultilistField的Datasource字段设置为/ sitecore / content / Repository,您将能够选择任何或所有。
但是,这可能不是您想要的,因为您可能有数千篇文章在查看您的文章名称。
另一种选择是创建一个子布局/渲染,从Repository项目中读取最新的X文章。通过简单的for循环,您可以执行以下操作:
var list = new List<Item>();
var repoItem = Sitecore.Context.Database.GetItem("/sitecore/content/Repository");
for (int i = 0; i < 5; i++)
{
list.Add(repoItem[i]);
}
您可以将DataSource
设置为asp:Repeater
。当然,您可以通过许多不同的方式(通过一些lambda表达式选择子项的数量,如果您还想使用关键字等,则使用Lucene来获取项目)。
您还可以在Sitecore中的某处定义项目数,因此SiteB / News和SiteA / Article可能会有所不同。
答案 1 :(得分:3)
看看你的问题,我可以想象你最终会选择一个选项,例如引入通配符项来显示存储库中这些不同位置的数据。在Marketplace.sitecore.net上有一个有趣的模块,在决定你想做什么之前也要看一下。
阅读你的最后一行:我可以从Repository / Item中提取任何文章并动态显示 我强烈建议您使用通配符解决方案。
答案 2 :(得分:1)
另一个选择是使用Sitecore Clones(来自Sitecore 6.4)或Proxies(早于Sitecore 6.4)。
代理: http://sdn.sitecore.net/Articles/Administration/Using%20Proxy%20Items%20in%205,-d-,3.aspx 警告:打开代理并使用它们会影响性能。我认为它的工作原理如下: - 每次必须获取项目/子项时,它在Proxy表中查找是否应添加任何其他项目 - 代理越多,每个“Sitecore查询”的“开销”越多,所有代理项目都必须查看是否有任何其他项目应该包含在结果中
虽然这会复制您选择克隆或代理的所有项目,但可能不是您想要做的。