如果用户访问某个页面超过 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
创建另一个以显示新规则。sublayout
greater 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;
}
}