2014-10-06 2 views
2

У меня есть некоторые компоненты в моей установке Sitecore, которые можно добавить к одному из нескольких заполнителей на странице. Местоположение источника данных для визуализации этих компонентов может изменяться в зависимости от того, какой заполнитель они добавляются на сайт. Я начал создавать процессор какРасположение динамических источников данных Sitecore

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

Класс подобен

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

Я не могу получить заполнитель, который я пытаюсь прикрепить к визуализации. Есть ли способ получить местозаполнитель или по крайней мере родительский компонент, в который добавляется компонент?

Благодаря

+0

Я так не думаю. Арги для этого конвейера предполагают, что местоположение источника данных фиксировано. И я не думаю, что есть какая-либо контекстуальная информация, чтобы защелкнуться. Интересная идея. –

ответ

1

Это очень хорошая идея, у вас есть здесь, но GetRenderingDatasourceArgs не может предоставить вам данные, вам нужно, если вы настраиваете разрешенные места DataSource на заполнителем.

Я искал через querystring & формы и элементы контекста, но ссылка на местозаполнитель не найден в конвейере getRenderingDatasource.

Я действительно придумал что-то, что может быть решением, хотя оно немного хаки.

  1. Создайте процессор для getPlaceholderRenderings. GetPlaceholderRenderingsArgs предоставит вам ключ-заполнитель.
  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"]); 
    } 
} 

Это работает, когда вы добавляете рендеринг в заполнитель, но я не проверял другие сценарии.
Я могу представить, что это не сработает, если вы установите источник данных рендеринга, который уже помещен в placeholder.

+0

R.e. 2) вы могли бы использовать HttpContext.Items вместо сеанса. –

Смежные вопросы