Sitecore动态数据源位置

时间:2014-10-06 21:54:18

标签: sitecore datasource

我的Sitecore安装中有一些组件可以添加到页面上任意多个占位符之一。这些组件的渲染的数据源位置可以根据它们添加到站点的占位符而更改。我开始创建像

这样的处理器
<getRenderingDatasource>
        <processor patch:after="*[@type='custom']"  type="custom" />
</getRenderingDatasource>

班级就像

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

我无法获得占位符,我正在尝试将渲染附加到。有没有办法可以获得占位符或至少添加组件的父级?

由于

1 个答案:

答案 0 :(得分:1)

这是一个非常好的主意,但如果您在占位符上配置了允许的数据源位置,则GetRenderingDatasourceArgs无法为您提供所需的数据。

我通过查询字符串&amp;表单变量和上下文项,但没有引用getRenderingDatasource管道中可用的占位符。

我确实想出了一些可能是解决方案的东西,尽管它有点笨拙。

  1. getPlaceholderRenderings创建处理器。 GetPlaceholderRenderingsArgs会为您提供占位符密钥。
  2. 将密钥存储在会话变量中(此时我还不知道在管道之间传输数据的另一种方式)
  3. getRenderingDatasource处理器中的会话中检索密钥。
  4. 这是我用来测试它的代码:

    // 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"]);
        }
    }
    

    当您向占位符添加渲染时,此功能可用,但我尚未测试其他方案 我可以想象,当您设置已放置在占位符中的渲染的数据源时,它将不起作用。