gpt4 book ai didi

sitecore - 我可以使用 FullPath 以编程方式转义 Sitecore 查询中的破折号吗?

转载 作者:行者123 更新时间:2023-12-04 11:03:07 25 4
gpt4 key购买 nike

我正在尝试扩展自定义 Sitecore 命令,以确定当前项目是否具有与某个模板 ID 匹配的父项目。

我知道理想情况下查询应该像 ./ancestor::*[@@templateid='{26710865-F082-4714-876B-D5E1F386792F}'] 一样简单如果项目是上下文,或 /sitecore/content/home/full/path/to/the-item/ancestor::*[@@templateid='{26710865-F082-4714-876B-D5E1F386792F}']
不幸的是,项目路径包括需要转义的破折号,如 /sitecore/content/home/full/path/to/#the-item#/ancestor::*[@@templateid='{26710865-F082-4714-876B-D5E1F386792F}'] .

但是,理想情况下,我只想使用项目的完整路径,因为它可以作为 item.Paths.FullPath 使用。 .

给定一个项目,编写包含其完整路径的查询并转义其中可能包含的任何破折号的最佳方法是什么?

最佳答案

我从未见过任何 Sitecore util 类或任何其他开箱即用的代码可以满足您的需求。有趣的是,Sitecore 确实有一个返回 false 的 util 方法。 (是的,它确实返回 false )但没有转义项目路径的方法,因此可以在查询中使用。

您可以在此处找到满足您要求的代码(由 Anders Laub 编写):https://blog.istern.dk/2014/10/29/escaping-dashes-in-sitecore-queries-datasource-query-update/

如果你懒得点击链接,我已经复制到这里的代码:

private string EscapeItemNamesWithDashes(string queryPath)
{
if (!queryPath.Contains("-"))
return queryPath;

var strArray = queryPath.Split(new char[] { '/' });
for (int i = 0; i < strArray.Length; i++)
{
if (strArray[i].IndexOf('-') > 0)
strArray[i] = "#" + strArray[i] + "#";
}
return string.Join("/", strArray);
}

如果你也想转义空格字符,你可以试试这个正则表达式:

string escapedPath = Regex.Replace(myItem.Paths.FullPath, "[^/]*[- ][^/]*", "#$0#");

您还应该记住,Sitecore 中有一些保留字也应该被转义。这些是(复制自 http://www.newguid.net/sitecore/2012/escape-characterswords-in-a-sitecore-query/ ):
  • 祖先
  • child
  • 后代
  • div
  • 关注
  • 模组
  • 家长
  • 自我
  • 异或
  • 关于sitecore - 我可以使用 FullPath 以编程方式转义 Sitecore 查询中的破折号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36991247/

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