在多个站点中使用Item作为数据存储库

时间:2013-04-18 07:09:38

标签: sitecore

我有这个内容树:

SiteA
    - Home
    - Articles

SiteB
    - Home
    - News

Repository
    - article1
    - article2
    - article3
    - ...
    - article1000

有没有办法可以从Repository项中提取任何文章并在SiteA/Article项目上动态显示?与SiteB/News相同。

附加问题: 是否可以从父项目库中继承每篇文章的布局?这些文章将通过迁移(我将在下一步工作)添加,一旦项目迁移,重新分配布局将花费太多时间。

3 个答案:

答案 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://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2010/10/Sitecore-CMS-6-4-Cloning.aspx

代理: http://sdn.sitecore.net/Articles/Administration/Using%20Proxy%20Items%20in%205,-d-,3.aspx 警告:打开代理并使用它们会影响性能。我认为它的工作原理如下: - 每次必须获取项目/子项时,它在Proxy表中查找是否应添加任何其他项目 - 代理越多,每个“Sitecore查询”的“开销”越多,所有代理项目都必须查看是否有任何其他项目应该包含在结果中

虽然这会复制您选择克隆或代理的所有项目,但可能不是您想要做的。