我正在寻找一种快速而又脏的方法来通过友好的URL查询特定页面的布局文件。这可能很容易,但我找不到解决方案。
基本上我想说下面的话。伪代码:
var mainpage = Sitecore.EasyQueryUtility.GetItemByFriendlyUrl(requestedUrl);
或
var mainpage = Sitecore.EasyQueryUtility.GetOppositeOfFriendlyUrl(friendlyurl);
答案 0 :(得分:1)
如果要获取用于页面布局的aspx文件的路径,可以使用:
Sitecore.Context.Item.Visualization.Layout.FilePath
答案 1 :(得分:1)
听起来你想在这里做两件事:
如果这些是正确的,希望这可以帮助你:
注意:我在运行中未经测试的代码
// if you have the full URL with protocol and host
public static Item GetItemFromUrl(string url)
{
string path = new Uri(url).PathAndQuery;
return GetItemFromPath(path);
}
// if you have just the path after the hostname
public static Item GetItemFromPath(string path)
{
// remove query string
if(path.Contains("?"))
path = path.split('?')[0];
path = path.Replace(".aspx", "");
return Sitecore.Context.Database.GetItem(path);
}
获得项目后,您可以获得布局名称,如下所示:
item.Visualization.GetLayout(Sitecore.Context.Device).Name;
或ASPX的布局物理文件路径:
item.Visualization.GetLayout(Sitecore.Context.Device).FilePath;
答案 2 :(得分:0)
我可能误解了您,但如果您想控制友好URL的格式,可以通过Sitecore.Links.UrlOptions类设置几个属性,并将此实例传递给链接管理器。有关详细信息,请参阅here。 (注意 - LinkManager类只能从SiteCore 6获得。)
您最终得到的代码如下所示:
Sitecore.Links.UrlOptions urlOptions = (Sitecore.Links.UrlOptions)Sitecore.Links.UrlOptions.DefaultOptions.Clone();
urlOptions.SiteResolving = Sitecore.Configuration.Settings.Rendering.SiteResolving;
string url = Sitecore.Links.LinkManager.GetItemUrl(item, urlOptions);
然后,您可以在传入的urlOptions上设置AddAspxExtension等字段。
正如您所看到的,该过程依赖于您传入项目 - 无论是通过当前上下文获取还是从您开始使用的URL中检索。
如果您询问有关获取布局定义项的信息,请查看this,告诉您如何操作。