2

如果用户访问某个页面超过 2 次,我想显示一些不同的子布局,所以我想使用这个规则“访问次数与数字相比”,但我不知道如何使用它?我尝试添加此规则并将“数字”替换为 2,但它不起作用。

4

2 回答 2

2

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

我查看了 Sitecore API,它的Tracker命名空间和我能找到的与单个页面查看次数最接近的属性是VisitPageIndex,但是反编译代码并签入MongoDB显示,这只是针对该网站的访问而查看的页面索引,所以这个不会为你工作。

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

例如

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

如果您不想编写自定义代码,另一种方法是根据 Sitecore 个性化扫描开箱即用的工作方式更改您的方法。

您将希望profile keysMarketing Centre例如“品牌意识”中使用或创建。将您的新用户分配profile key给相关页面并为其分配一个分数,例如 10。这意味着每次用户访问此页面时,他们将在“品牌意识”中获得 10 分。

现在是个性化位。sublayout使用“特定配置文件键的值与特定值比较的位置”在现有规则上创建新的个性化规则,如果得分为 20,则将其设置为隐藏。如果值为20,则greater than or equal to创建另一个以显示新规则。sublayoutgreater than or equal to

如果您需要更多信息,我已经写了一篇关于此的博客

于 2016-03-06T20:37:10.400 回答
2

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

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;
    }
}
于 2016-03-06T20:19:19.893 回答