2012-02-22 65 views
1

我正在寻找一种快速和肮脏的方式来查询特定页面的布局文件的友好的网址。这可能很容易,但我找不到解决方案。sitecore按客户端查询项目url

基本上我想说一些像下面这样的东西。伪代码:

var mainpage = Sitecore.EasyQueryUtility.GetItemByFriendlyUrl(requestedUrl); 

var mainpage = Sitecore.EasyQueryUtility.GetOppositeOfFriendlyUrl(friendlyurl); 
+0

你期望在'mainpage'中得到什么?网址后面的内容项目?布局定义项目? – 2012-02-23 07:38:09

+0

可能是'.aspx'文件的路径? – ub1k 2012-02-23 10:12:49

回答

1

这听起来像你想在这里做两件事情:

  1. 根据其在地址栏中呈现的URL(即友好URL)确定项目
  2. 确定项目确定项目后正在使用的布局。

如果这些都是正确的,希望这可以帮助你:

注意:未经测试的代码我没上即时

// 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; 
+0

是的,我实际上只需要修改路径将各种主机名更改为内容路径,然后查询 – 2012-02-24 20:13:44

0

我可能误解了你,但如果你想控制友好的URL的格式,你可以通过设置在Sitecore.Links.UrlOptions类,并通过几个属性这是链接管理器的一个实例。有关更多详细信息,请参阅here。 (注 - LinkManager类只能从SiteCore 6 I beleive中获得)。

你最终会看起来像这样的代码:

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); 

然后,您可以设置字段,如AddAspxExtension您在

通过正如你可以看到urlOptions,这个过程是对依赖你传递一个项目 - 无论是通过当前上下文获取,还是从你开始使用的URL中检索。

如果您询问获取布局定义项目,请查看this,它会告诉您如何。

1

如果你想获得它用于你的页面的布局aspx文件的路径,你可以使用:

Sitecore.Context.Item.Visualization.Layout.FilePath