在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的内容已经更换