SItecore中的个性化

时间:2016-03-06 11:24:11

标签: sitecore sitecore8 personalization

如果用户访问某个页面的次数超过2次,我想显示一些不同的子布局,因此我想使用此规则"其中访问次数为#。比较数字"但我不知道如何使用它?我尝试添加此规则并替换" number"到2但它不起作用。

2 个答案:

答案 0 :(得分:2)

正如马雷克所说,你使用的条件是不可能的。但是,您可以通过查看页面的VisitPageIndex来调整Rule条件以实现此目的。

public class ContactVisitPageIndexCondition<T> : OperatorCondition<T> where T : RuleContext
{
    public int No
    {
        get;
        set;
    }

    public ID PageGUID 
    {
        get;
        set;
    }

    public ContactVisitPageIndexCondition()
    {
    }

    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");
        int contactVisitPageIndex  =  Tracker.Current.Session.Interaction.Pages.SingleOrDefault(p => p.Item.Id == PageGUID).VisitPageIndex;
        switch (base.GetOperator())
        {
            case ConditionOperator.Equal:
            {
                return contactVisitPageIndex == this.No;
            }
            case ConditionOperator.GreaterThanOrEqual:
            {
                return contactVisitPageIndex >= this.No;
            }
            case ConditionOperator.GreaterThan:
            {
                return contactVisitPageIndex > this.No;
            }
            case ConditionOperator.LessThanOrEqual:
            {
                return contactVisitPageIndex <= this.No;
            }
            case ConditionOperator.LessThan:
            {
                return contactVisitPageIndex < this.No;
            }
            case ConditionOperator.NotEqual:
            {
                return contactVisitPageIndex != this.No;
            }
        }
        return false;
    }
}

答案 1 :(得分:2)

正如Marek Musielak所说,Where the visit no. compares to ..与访问该网站有关,而不是单独的网页。

我查看了Sitecore API,它的Tracker命名空间,我可以找到的最接近的属性是单个页面查看计数VisitPageIndex但是反编译代码并检入MongoDB显示只是该网页的索引被访问了,因此这对您不起作用。

查看MongoDB没有用于存储网页浏览量的属性,但它确实存储了Pages查看的Interactions,因此您可以编写一个自定义规则来计算该网页的显示次数在Pages数组中

e.g。

int pageViewed = Tracker.Current.Session.Interaction.Pages.Count(p => p.Item.Id.Equals(yourPageId))

如果您不想编写自定义内容,另一种选择是改变您的方法,使其与Sitecore个性化扫描的开箱即用方式相符。

您希望在profile keys中使用或创建Marketing Centre,例如&#39;品牌意识&#39;。将新profile key分配给相关网页,并为其指定分数,例如10.这意味着每次用户访问此页面时,他们都会获得10分的“品牌意识”。

现在为个性化位。使用&#39;在现有sublayout上创建新的个性化规则,其中特定配置文件密钥的值与特定值&#39;相比较。如果分数为greater than or equal to,则将其设置为隐藏20.如果值为sublayout 20,则创建另一个以显示新的greater than or equal to

如果you need more info

,我已经写了一篇关于此的博客