2012-02-22 132 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