gpt4 book ai didi

Sitecore 获得所有父级(祖先),几乎不需要处理(性能)

转载 作者:行者123 更新时间:2023-12-03 06:37:39 27 4
gpt4 key购买 nike

我正在尝试提出获取上下文项的所有祖先的解决方案。一种选择是将 _path 存储在索引中,另一种选择是执行类似于以下操作的操作: http://www.glass.lu/Blog/GettingAncestors

我没有运气让解决方案适用于上述(玻璃映射器)解决方案。

我让索引解决方案正常工作,但希望避免使用索引只是为了获取 _path (祖先的集合),因为我们没有任何其他要求来使用索引,例如搜索等

如果有人可以分享工作解决方案的代码片段,或者如果 Glassmapper 已经包含了上述博客解决方案,那就更好了。

最佳答案

检查一项是否是另一项的后代的最有效方法是简单地检查当前项属性 Paths.LongID 是否以父项的 LongID 开头项目:

Item currentItem = Sitecore.Context.Item;
IList<Item> menuItems = GetMenuItems();

foreach (var menuItem in menuItems)
{
bool isActive = currentItem.Paths.LongID.StartsWith(menuItem.Paths.LongID);

// do code
}

这将起作用,因为每个项目的路径 GUID 都是唯一的。

或者,如果您只想使用 Glass 模型,则可以使用 SitecoreInfoType.FullPath 属性:

[SitecoreInfo(SitecoreInfoType.FullPath)]
public virtual string FullPath { get; private set; }

然后从您的代码中您可以简单地检查:

Item currentItem = Sitecore.Context.Item; //or use SitecoreContext() to get a strongly types model
IEnumerable<MenuItem> menuItems = GetMenuItems();

foreach (var menuItem in menuItems)
{
bool isActive = currentItem.Paths.FullPath.StartsWith(menuItem.FullPath);

// do code
}

只是警告一下,由于每个菜单项现在都需要运行代码才能确定状态,这将使您的菜单组件难以缓存,从而导致缓存太多变体或每页缓存。您最好将此逻辑移至 Javascript 中,以使用当前页面 URL 设置菜单状态,这将允许您的组件为所有页面缓存一次。

关于Sitecore 获得所有父级(祖先),几乎不需要处理(性能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37902794/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com