Sitecore 在多个站点中将项目用作数据存储库

Sitecore 在多个站点中将项目用作数据存储库,sitecore,Sitecore,我有一个内容树: SiteA - Home - Articles SiteB - Home - News Repository - article1 - article2 - article3 - ... - article1000 是否有一种方法可以从存储库项目中提取任何文章,并将其动态显示在SiteA/文章项目上?我对SiteB/News也会这么做 补充问题: 是否可以从父项存储库继承每篇文章的布局?这些文章将通过

我有一个内容树:

SiteA
    - Home
    - Articles

SiteB
    - Home
    - News

Repository
    - article1
    - article2
    - article3
    - ...
    - article1000
是否有一种方法可以从存储库项目中提取任何文章,并将其动态显示在SiteA/文章项目上?我对SiteB/News也会这么做

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

是的,有。根据您的需求,您可以做一些不同的事情。 例如,您的站点上可以有一个MultilistField a/Article项目,它使您能够从存储库项目中选择项目。通过将MultilistField的Datasource字段设置为/sitecore/content/Repository,您将能够选择任意或全部。 然而,这可能不是你想要的,因为你可能有成千上万的文章在看你的文章名

另一个选项是创建从存储库项读取最新X文章的子布局/呈现。通过一个简单的for循环,您可以执行以下操作:

可以将其设置为asp:Repeater的数据源。当然,您可以通过多种不同的方式通过一些lambda表达式选择子项的数量,如果您还想使用关键字等,可以使用Lucene获取项。。
您还可以在Sitecore中的某个位置定义项目数,因此SiteB/News和SiteA/Article的项目数可能不同

另一种选择是使用Sitecore 6.4中的Sitecore克隆或比Sitecore 6.4旧的代理

克隆:

代理: 注意:打开代理并使用它们会影响性能。我认为它是这样工作的: -每次必须获取项/子项时,它都会在代理表中查看是否应该添加任何其他项 -代理越多,每个Sitecore查询的开销就越大。查询必须查看所有代理项,以查看是否有任何其他项应包含在结果中


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

看看您的问题,我可以想象您最终会选择一个选项,例如引入通配符项目,以在这些不同的位置上显示存储库中的数据。Marketplace.sitecore.net上提供了一个有趣的模块,在决定要做什么之前,请先看看这个模块


阅读您的最后一行:我可以从存储库/项目中提取任何文章并动态显示它。我强烈建议您使用通配符解决方案。

这是一个很好的观点,但是如果您使用代理,您确实需要小心-这可能会开始影响性能。我不知道克隆是怎么回事。是的,代理的性能会变得很糟糕,我会把它添加到答案中。克隆,应该表现不错。这是一个不错的选择。另外,看看您的-article1到-article1000,确保您不会发疯,每个节点最多只有100个项目,否则会影响性能。您可能想看一看,并在那里考虑一个索引,以便能够在没有太多性能问题的情况下快速获取新闻项。是的,这是一个很好的观点。或者使用Lucence/SOLR索引解决方案是一个好主意。我已经尝试使用通配符模块,它可以工作,这就是我正在寻找的。但我发现了另一个问题,是否可以从父项存储库/继承每篇文章的布局?由于本文将通过迁移添加,因此添加布局将花费太多时间。再次感谢。这不是一个使用标准值的选项吗?您只需将标准值添加到模板中,即可用于存储库中的项目?
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]);
}