Sitecore’s Digital Marketing System (DMS) can help you personalize the content your site displays to your users/visitors and can be easily customized to fit your specific requirements while using all the functionality that Sitecore already offers.

Let’s suppose you want to show different content modules to your users depending on their profile attributes like age, gender, number of twitter followers, number of achievements earned in the site, visitors without an account, etc.

We will need to let the site editor choose and create new rules that may include one or more profile attributes; therefore we can’t create a set of fixed rules to be used. Also, it is important to note that as result of our personalization, we will be required to:

-          Show a different sublayout

-          Hide the sublayout

-          Change the datasource of the sublayout

First, here is my User Profile class:

namespace RulesEngine.Session

{

public class UserProfile

{

public int UserId { get; set; }

public DateTime RegistrationDate { get; set; }

public string Nationality { get; set; }

public UserMaritalStatus MaritalStatus { get; set; }

public int NumberAchievements { get; set; }

}

public enum UserMaritalStatus

{

Single,

Married,

Divorced

}

}

To keep this demo as simple as possible, I’ll also create a dummy user session manager using a query string value to simulate the current logged in user:

namespace RulesEngine.Session

{

public static class UserSession

{

public static UserProfile GetCurrentUser()

{

var userId = HttpContext.Current.Request.QueryString["UserId"];

if (string.IsNullOrEmpty(userId))

{

//User not authenticated

return null;

}

UserProfile user = null;

switch (userId)

{

case "1":

user = new UserProfile()

{

UserId = 1,

RegistrationDate = new DateTime(2009, 10, 6),

MaritalStatus = UserMaritalStatus.Married,

NumberAchievements = 10,

Nationality = "British"

};

break;

case "2":

user = new UserProfile()

{

UserId = 2,

RegistrationDate = new DateTime(2005, 1, 26),

MaritalStatus = UserMaritalStatus.Single,

NumberAchievements = 55,

Nationality = "Amreican"

};

break;

case "3":

user = new UserProfile()

{

UserId = 3,

RegistrationDate = new DateTime(2011, 2, 14),

MaritalStatus = UserMaritalStatus.Divorced,

NumberAchievements = 3,

Nationality = "French"

};

break;

case "4":

user = new UserProfile()

{

UserId = 4,

RegistrationDate = new DateTime(1999, 8, 30),

MaritalStatus = UserMaritalStatus.Single,

NumberAchievements = 8,

Nationality = "Ecuadorian"

};

break;

}

return user;

}

}

}

Let’s start with the user’s nationality. All we need to do is create a new class with StringOperatorCondition as the base:

using Sitecore.Rules;

using Sitecore.Rules.Conditions;

namespace RulesEngine.Rules

{

public class NationalityCondition<T> : StringOperatorCondition<T> where T : RuleContext

{

//This is the value the editor will enter

public string Nationality { get; set; }

/// <summary>

/// This function will be called to test the condition

/// </summary>

protected override bool Execute(T ruleContext)

{

//Get the current user from our dummy user session manager

var user = UserSession.GetCurrentUser();

//Check if the user is logged in, otherwise return false

if (user == null)

return false;

//Use base function to compare the values

return this.Compare(user.Nationality, Nationality);

}

}

}

After a build of the solution, we need to register this new condition in Sitecore and copy the output dll to the website’s bin directory (if using a separate project). Open Sitecore’s content editor and navigate to the location: /sitecore/system/Settings/Rules/Conditional Renderings/Conditions and create a new folder:

Then we create a new condition:

The Text field is the content that will be shown to the editor when selecting this condition, we put the following text:

where the user's nationality [operatorid,StringOperator,,compares to] [Nationality,Text,,nationality name]

Notice that it has some special content surrounded by square brackets. This tag has four parameters: the first is the name of the a property in the condition, the second parameter is the name of the macro item (located in /Sitecore/System/Settings/Rules/Common/Macros), the third parameter is a parameter that will be sent to the macro item selected in the second parameter, and the fourth parameter is the text shown to the editor before he enters a value for the condition. In our case we have:

Parameter

Object

operatorid

Sitecore.Rules.Conditions.StringOperatorCondition.OperatorId

StringOperator

/sitecore/system/Settings/Rules/Common/String Operators

(empty)

We don’t need a parameter

compares to

This text will be shown to the editor

Parameter

Object

Nationality

Our RulesEngine.Rules.NationalityCondition.Nationality

Text

It will request a single line of text

(empty)

We don’t need a parameter

nationality name

This text will be shown to the editor

To apply this new rule to our site, we go to the item we want to personalize, then go to Presentation -> Layout Details:

Then on the new window, click on Edit:

Under Controls, select the sublayout and click on Personalize. Notice that this Personalize button only appears once you add DMS to your Sitecore installation:

Then click on New Condition:

Enter a name for the condition and then click Edit:

Now we can select our new condition:

See part two of this post for how to create conditions that will compare integer, dates and other custom values.

Sitecore Digital Marketing System, Part 1: Creating personalized, custom content for site visitors(自定义SiteCore中的 Item的Personalize的Condition) -摘自网络的更多相关文章

  1. View Controller Programming Guide for iOS---(四)---Creating Custom Content View Controllers

    Creating Custom Content View Controllers 创建自定义内容视图控制器 Custom content view controllers are the heart ...

  2. 【IOS笔记】Creating Custom Content View Controllers

    Creating Custom Content View Controllers 自定义内容视图控制器 Custom content view controllers are the heart of ...

  3. “System.BadImageFormatException”类型的未经处理的异常在 PurchaseDevices.Access.dll 中发生 其他信息: 未能加载文件或程序集“System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139”或它的某一个依赖项。试图加载格式不正确

    引用sqlite的程序集时,有时会报如下异常:  "System.BadImageFormatException"类型的未经处理的异常在 PurchaseDevices.Acces ...

  4. System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。

    一.引起的源头 环境:vs2015,sqlserver2008 相关程序包:ef6 定义了一个实体article public class Article { public string Data{g ...

  5. sitecore系统教程之使用修补程序文件自定义Sitecore配置

    您可以使用修补程序文件在Sitecore中添加或更改配置设置.Sitecore将修补程序文件与Sitecore.config 文件合并,以创建在运行时使用的配置文件. 本主题描述: 补丁文件放置 补丁 ...

  6. [转载]未能从程序集“System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”中加载类型“System.Web.WebPages.DisplayModeProvider”

    转载于http://bkcoding.cn/post_1210.html 使用vs2010开发asp.net mvc程序时,出现 未能从程序集“System.Web.WebPages, Version ...

  7. [转]Creating a custom ribbon for Outlook 2013, 2010 and toolbar for Outlook 2007, 2003 – C# sample

    本文转自:https://www.add-in-express.com/creating-addins-blog/2013/05/21/outlook-ui-customization-ribbons ...

  8. P/Invoke出现错误 System.NullReferenceException”类型的未经处理的异常在 未知模块。 中发生 未将对象引用设置到对象的实例。

    问题 “System.NullReferenceException”类型的未经处理的异常在 未知模块. 中发生 未将对象引用设置到对象的实例. 解决方案 1.尝试 用管理员身份运行CMD,输入nets ...

  9. Creating a custom analyzer in ElasticSearch Nest client

     Creating a custom analyzer in ElasticSearch Nest client Question: Im very very new to elasticsearch ...

随机推荐

  1. Android支付接入(五):机锋网

    原地址:http://blog.csdn.net/simdanfeg/article/details/9012083 前边已经陆续跟大家走了一遍运营商和支付宝付费接入,今天跟大家一起看看机锋网的支付接 ...

  2. 详细解析: VictorOps 是如何利用和完善 ChatOps?

    ChatOps,即聊天应用,在软件开发中被广泛应用改进开发者之间的沟通.简单地说,ChatOps 是将内容或行动 (或两者) 迁移到聊天客户端.这样做之后,企业内的所有团队都能分享重要信息,行动,及其 ...

  3. Visual Leak Detector 2.2.3 Visual C++内存检测工具

      Visual Leak Detector是一款免费的.健全的.开源的Visual C++内存泄露检测系统.相比Visual C++自带的内存检测机制,Visual Leak Detector可以显 ...

  4. java核心技术记录

    Java是一种强类型的语言,这意味着必须为每一个变量声明一种类型.在java中,一共有8种基本类型,其中4种整型.2种浮点型.1种用于表示Unicode编码的字符单元的字符类型char和一种用于表示真 ...

  5. 分析java程序中cpu占用过高的线程

    http://blog.csdn.net/jgwei/article/details/12079147 http://hllvm.group.iteye.com/group/topic/38893 h ...

  6. Kafka操作

    http://blog.csdn.net/xiao_jun_0820/article/details/46831203 http://blog.csdn.net/xcockroach/article/ ...

  7. strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签

    定义和用法 strip_tags() 函数剥去 HTML.XML 以及 PHP 的标签. 语法 strip_tags(string,allow) 参数 描述 string 必需.规定要检查的字符串. ...

  8. live555源码研究(一)------live555MediaServer的启动过程和基本类图

    live555MediaServer.cpp就是live555服务器启动的过程. 一.启动过程 1,构造运行环境,运行环境包括了TaskScheduler 2,构造鉴权数据,也就是登陆的用户名和密码等 ...

  9. iphone6S“玫瑰金”的秘密——阳极氧化

    阳极氧化对多数人来说是一个熟悉又陌生的名词,大多数可能知道它的作用之一就是是能使金属呈现各种各样色彩.最为人熟知的运用阳极氧化技术的产品就是iphone系列产品了,已经推出了金色,玫瑰金色,深空灰色, ...

  10. TOP命令详解

    TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中C ...