2014-10-06 59 views
2

我的Sitecore安裝中有一些組件可以添加到頁面上任何多個佔位符之一。這些組件的渲染的數據源位置可以根據它們添加到站點的佔位符進行更改。我開始創建一個處理器一樣Sitecore動態數據源位置

<getRenderingDatasource> 
     <processor patch:after="*[@type='custom']" type="custom" /> 
</getRenderingDatasource> 

類是像

public class GetDynamicDataSourceLocations : GetDatasourceLocation 
    { 
     public void Process(GetRenderingDatasourceArgs args) 
     { 
      ...    
     } 
    } 

我不能說我試圖附加渲染的佔位符。有沒有什麼辦法可以讓佔位符或至少是添加組件的父級?

感謝

+0

我不這麼認爲。該管線的參數假定數據源位置是固定的。我不認爲有任何上下文信息可以鎖定。有趣的想法,但。 – 2014-10-07 05:55:23

回答

1

這是你在這裏有一個很好的想法,但GetRenderingDatasourceArgs不能提供您需要的,如果你配置的佔位符允許的數據源位置的數據。

我已經通過查詢字符串&搜索了表單變量和上下文項目,但是沒有提及getRenderingDatasource管道中可用的佔位符。

我確實想出了一些可能是解決方案的東西,雖然這有點不好意思。

  1. getPlaceholderRenderings創建一個處理器。​​將爲您提供佔位符密鑰。
  2. 將密鑰存儲在會話變量中(我不知道此時在管道之間傳輸數據的另一種方式)
  3. 從您的getRenderingDatasource處理器中的會話中檢索密鑰。

這是我用來測試它的代碼:

// Add to the getRenderingDatasource pipeline. 
public class GetPlaceholderKey 
{ 
    public void Process(GetPlaceholderRenderingsArgs args) 
    { 
     System.Web.HttpContext.Current.Session["Placeholder"] = args.PlaceholderKey; 
    } 
} 

// Add to the getRenderingDatasource pipeline. 
public class GetAllowedDatasources 
{ 
    public void Process(GetRenderingDatasourceArgs args) 
    { 
     Debug.WriteLine(System.Web.HttpContext.Current.Session["Placeholder"]); 
    } 
} 

時加渲染的佔位符這個工作,但我沒有測試過其他方案。
我可以想象,當您設置已放置在佔位符中的渲染的數據源時,它不會工作。

+0

R.e. 2)你可能能夠使用HttpContext.Items而不是會話。 – 2014-10-07 11:23:05