Sitecore DMS 中自定义Rule 实现页面个性化

        在Sitecore 的DMS 中,提供了丰富的个性化页面的功能。 用户通过配置不同的rule,来实现页面内容的个性化。在Sitecore中已经提供了许多rule,但在实际项目中,还是会遇到一些特定网站的特殊需求。这时候就需要我们自定义rule。下面我们就来介绍下如何自定义一个rule。

        现在,我们先有一个这样的demo首页,页面上有一个模拟banner的sublayout

        sublayout 通过data source来指定其数据源


        我们想要实现的效果是: 当url中sc_key参数为demo时,更换页面的banner。好,下面我们就来实现这个效果。

        1. 在/sitecore/system/Settings/Rules/Definitions/Elements下新建一个rule folder

        2. 在下面再新建一个condition


        根据我们的需求,维护Text字段:

        where the search keywords [operatorid,StringOperator,,compares to] [keyword,Text,,keyword]

       其中变量的格式要求为:

       每个变量用[] 括起来,每个变量有4个参数,参数之间用逗号隔开,4个参数分别为

        1. 在.NET 类中使用的变量名称
        2. 在 /Sitecore/System/Settings/Rules/Common/Macros 节点下sitecore预定义的一些方法名称,或者为空.
        3. 给前一个参数使用的变量
        4. 设定rule时展示用的名称

        3. 在/sitecore/system/Settings/Rules/Definitions/Tags下新建一个tags


        4. 将新建的tags添加到之前建的condition下

        5. 因为我们是修改rendering的condition,所以我们把tags添加到rendering condition下:

     保存发布后,我们可以在page editor下查看下是否有我们新建的condition


        现在,我们已经配置好新的condition,接下来我们代码实现功能

        1. 新建一个类

       

namespace SitecoreDemo.layouts.Demo.Conditions
{
    public class SearchKeywords<T> :StringOperatorCondition<T> where T : RuleContext
    {
        protected override bool Execute(T ruleContext)
        {

            var sc_key = HttpContext.Current.Request.QueryString["sc_key"];
            if (string.IsNullOrEmpty(sc_key))
            {
                return false;
            }

            return this.Compare(sc_key, keyword);
            
        }
        public string keyword { get; set; }
    }
}

        2. 维护前面新建的condition节点中的type字段

        3. 保存发布。我们配置一下页面


        访问http://demo/demohome?sc_key=demo。可以看到此时页面中banner的内容已经更换




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值