写在前面:
转载请注明出处
-
什么是Sitecore的规则系统 (rules engine)?
Sitecore规则系统是一个自带的用来评估一些特定条件(condition)的一个Sitecore模块。会根据评估的条件进行个性化操作(action)譬如显示个性化(personalization)页面或转接到个性化连接。通常被用来对于不同用户或浏览者定点投放不同内容或推荐从而达到更精准的营销 -
什么是Sitecore的条件 (condition)?
就是字面上的意思,可以是true也可以是false。Sitecore自带一些强大的条件譬如用户访问的日期,访问使用的设备,地理位置等。根据条件的true或false来对用户显示不同内容。 -
什么是个性化(personalization)?
Sitecore根据不同的条件的结果显示不同的内容。
遇到的问题:
当我们在Sitecore中对一个Sublayout进行个性化 (personalization) 的时候, 我们发现国家的个性化并不能显示不同的内容,如下:
- 对HeaderLogo这个Sublayout进行个性化,当用户访问的国家是China的时候,显示中国版本的HeaderLogo (此HeaderLogo为中国国旗), 当国家是美国的时候显示美国版本HeaderLogo (此HeaderLogo为美国国旗), 当国家不是以上两个国家时,显示默认的Site的HeaderLogo (此HeaderLogo为Sitecore的默认主页图片)。
(备注: Sitecore是根据访问者IP地址来判定访问者国家及其他地理位置信息,需要开通Sitecore的IP Geolocation服务来实现,这里我已经开通了此服务,所以不是服务问题。如何开通并配置Sitecore IP Geolocation服务?)
- 但是当访问该页面时,显示的是默认的HeaderLogo,说明Sitecore认为访问的IP地址既不在美国,也不再中国,但是我本机确实是在国内,所以按照个性化的设置,应该显示中国的HeaderLogo,即中国国旗。前面提到我已经开通了Sitecore的IP Geolocation服务,并进行了相应配置,所以应该不是服务问题。
- 通过debug查看Sitecore的地理位置IP数据 (GeoIPData) 我们发现, GeoData.Country返回的数据是"CN"而不是"China", 所以此时Country并不等于China, 更不可能等于United States。在两个条件都没有符合的情况下, 页面显示了在默认条件下的内容, 即默认的HeaderLogo图片。这说明Sitecore在用IP来判断用户位置时,存入GeoData.Country的数据是所在国家的两位代码:
解决办法:创建一个自己的条件,判断国家是否等于代码
- 首先我们的目标是判断一个国家是不是等于一个代码,代码需要在管理员设定条件时自己填写。在 /sitecore/system/Settings/Rules/Definitions/Elements/GeoIP 这个路径下创建一个新的Condition, 取名为Country Code
- 选中Country Code, 在Data区域的Text中填入"where the country [operatorid,StringOperator,compares to] [value,specific country code]", 在下面一个区域Script区域的Type中填入"Sitecore.Analytics.Rules.Conditions.CountryCondition,Sitecore.Analytics", 保存并发布。
- 将Personliaze的条件改变成新创建的这个条件: 选择is equal to并填入CN作为Country Code.
- 将这个修改过Sublayout的Item发布。此时刷新页面,我们可以看到我们设定的符合条件的HeaderLogo图片, 即中国国旗, 就出现了。
小总结:
以上我们了解了Sitecore的个性化,规则与条件系统及个性化系统。通过设置不同个性化,我们发现Sitecore的GeoIP获得的并不是国家全称而是两个字母的国家代码。通过创建一个新的规则, 我们成功的使Sitecore通过国家代码而不是国家全称来判断是否符合条件并显示符合条件的内容。以此类推,我们可以使用其他的条件和个性化,并根据我们的需要创建自己的规则。