如果用户访问某个页面超过 2 次,我想显示一些不同的子布局,所以我想使用这个规则“访问次数与数字相比”,但我不知道如何使用它?我尝试添加此规则并将“数字”替换为 2,但它不起作用。
2 回答
正如 Marek Musielak 所说,Where the visit no. compares to ..与访问网站有关,而不是与单个页面有关。
我查看了 Sitecore API,它的Tracker命名空间和我能找到的与单个页面查看次数最接近的属性是VisitPageIndex,但是反编译代码并签入MongoDB显示,这只是针对该网站的访问而查看的页面索引,所以这个不会为你工作。
查看MongoDB没有用于存储页面浏览量的属性,但它确实存储了浏览量Pages,Interactions因此您可以编写一个自定义规则来计算该页面在 Pages 数组中的次数
例如
int pageViewed = Tracker.Current.Session.Interaction.Pages.Count(p => p.Item.Id.Equals(yourPageId))
如果您不想编写自定义代码,另一种方法是根据 Sitecore 个性化扫描开箱即用的工作方式更改您的方法。
您将希望profile keys在Marketing Centre例如“品牌意识”中使用或创建。将您的新用户分配profile key给相关页面并为其分配一个分数,例如 10。这意味着每次用户访问此页面时,他们将在“品牌意识”中获得 10 分。
现在是个性化位。sublayout使用“特定配置文件键的值与特定值比较的位置”在现有规则上创建新的个性化规则,如果得分为 20,则将其设置为隐藏。如果值为20,则greater than or equal to创建另一个以显示新规则。sublayoutgreater than or equal to
如果您需要更多信息,我已经写了一篇关于此的博客
正如马雷克所说,这在您使用的条件下是不可能的。但是,您可以通过查看页面的 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;
}
}