0

我有这个内容树:

SiteA
    - Home
    - Articles

SiteB
    - Home
    - News

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

有没有办法可以从RepositoryItem 中提取任何文章并在 Item 上动态显示SiteA/Article?我也会这样做SiteB/News

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

4

3 回答 3

4

就在这里。根据您的要求,您可以做一些不同的事情。
例如,您可以MultilistField在 SiteA/Article 项目上添加一个,它使您能够从 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]);
}

您可以将其设置为 aDataSourceasp:Repeater. 当然,您可以通过许多不同的方式来实现(通过一些 lambda 表达式选择子项的数量,如果您还想使用关键字等,请使用 Lucene 来获取项)。
您还可以在 Sitecore 中的某处定义项目的数量,因此 SiteB/News 和 SiteA/Article 的数量可能不同。

于 2013-04-18T08:02:23.317 回答
3

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

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

于 2013-04-18T13:14:35.020 回答
1

另一种选择是使用 Sitecore 克隆(来自 Sitecore 6.4)或代理(早于 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 注意事项:打开代理并使用它们会影响性能。我认为它的工作原理是这样的: - 每次它必须获取项目/子项时,它都会在代理表中查看是否应该添加任何其他项目 - 代理越多,每个“站点核心”的“开销”就越多查询”必须查看所有代理项以查看是否有任何其他项应包含在结果中

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

于 2013-04-18T08:15:36.917 回答