Sitecore个性化首次访问规则

时间:2017-06-21 20:19:55

标签: sitecore sitecore8 sitecore-mvc

我想知道Sitecore 8.2中的任何内置个性化规则是否符合我要求的要求。使用个性化我试图在您第一次访问页面时在页面上显示模块。在当前会话中对页面的任何后续访问都不会呈现模块。

我认为内置规则“在当前访问期间访问 [特定页面] ”将会有效,但在我的方案中却不行。如果 [特定页面] 参数不是当前页面,但这不是我需要的,它可以工作。

似乎在验证规则之前记录了访问,因此当规则最终得到验证时,它认为页面已经被访问过,而实际上这可能是第一次访问页面。

除了创建自定义规则之外的任何想法?提前谢谢。

1 个答案:

答案 0 :(得分:4)

我认为Sitecore中没有任何OOTB。你是对的--Sitecore首先计算页面访问次数,然后执行规则。

我创建了一篇博客文章,描述了您的需求:https://www.skillcore.net/sitecore/sitecore-rules-engine-has-visited-certain-page-given-number-of-times-condition

快捷方式:

  1. 创建一个新条件项:

    文字:访问过的[PageId,Tree,root = / sitecore / content,specific]页面[OperatorId,Operator,比较] [当前访问期间的[Index,Integer ,, number]次

    输入:YourAssembly.YourNamespace.HasVisitedCertainPageGivenNumberOfTimesCondition,YourAssembly

  2. 使用它来个性化您的组件的值:

    在当前访问期间访问[YOURPAGE]页面[等于] [1]次

  3. 创建代码:

  4. public class HasVisitedCertainPageGivenNumberOfTimesCondition<T> : OperatorCondition<T> where T : RuleContext
    {
        public string PageId { get; set; }
        public int Index { get; set; }
    
        protected override bool Execute(T ruleContext)
        {
            Assert.ArgumentNotNull(ruleContext, "ruleContext");
            Assert.IsNotNull(Tracker.Current, "Tracker.Current is not initialized");
            Assert.IsNotNull(Tracker.Current.Session, "Tracker.Current.Session is not initialized");
            Assert.IsNotNull(Tracker.Current.Session.Interaction, "Tracker.Current.Session.Interaction is not initialized");
    
            Guid pageGuid;
    
            try
            {
                pageGuid = new Guid(PageId);
            }
            catch
            {
                Log.Warn(string.Format("Could not convert value to guid: {0}", PageId), GetType());
                return false;
            }
    
            var pageVisits = Tracker.Current.Session.Interaction.GetPages().Count(row => row.Item.Id == pageGuid);
    
            switch (GetOperator())
            {
                case ConditionOperator.Equal:
                    return pageVisits == Index;
                case ConditionOperator.GreaterThanOrEqual:
                    return pageVisits >= Index;
                case ConditionOperator.GreaterThan:
                    return pageVisits > Index;
                case ConditionOperator.LessThanOrEqual:
                    return pageVisits <= Index;
                case ConditionOperator.LessThan:
                    return pageVisits < Index;
                case ConditionOperator.NotEqual:
                    return pageVisits != Index;
                default:
                    return false;
            }
        }
    }