2016-03-06 48 views
2

我想显示一些不同的sublayout,如果用户访问了一些页面超过2次,所以我想使用这个规则“访问号码与数字比较”,但我不知道如何使用它?我试图添加此规则并将“数字”替换为2,但它不起作用。SItecore的个性化

+0

您使用的Sitecore 8的修订版本是什么? “我不知道如何使用它”是什么意思?您是否已经在子布局中设置了规则并将其发布? –

+1

这里有一篇关于建立个性化的好文章 - http://www.nonlinearcreations.com/Digital/how-we-think/articles/2014/06/Sitecore-DMS-personalization-howto.aspx –

+1

' 。比较......规则意味着它是用户在该网站上的第n次访问,而不是该用户多次打开其中一个页面。 –

回答

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; 
    } 
} 
+0

'VisitPageIndex'是一个痛苦的事情,只有返回联系人的访问中查看的页面的索引,但这是一个很好的答案 - 只需替换'Tracker.Current.Session.Interaction.Pages.SingleOrDefault(p => p.Item。 Id == PageGUID).VisitPageIndex;'用'Tracker.Current.Session.Interaction.Pages.Count(p => p.Item.Id.Equals(yourPageId))' –

2

由于马雷克Musielak说,Where the visit no. compares to ..有关访问该网站,而不是一个人的页面。

我有Sitecore的API中一看,其Tracker命名空间,我可以找到具体的网页浏览次数最接近的属性是VisitPageIndex但反编译的代码,并检查MongoDB表明,仅仅是页面的索引被视为对于访问该网站,所以这不会为你工作。

展望MongoDB没有属性来存储页面访问量,但它确实存储了观看InteractionsPages所以你可以写一个自定义规则计数的次数是页面的页面数组中

例如

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

,如果你不想编写自定义的另一种方法是用怎样Sitecore的个性化扫描工作有点直列改变你的方法开箱。

您会想在Marketing Centre例如Marketing Centre中使用或创建profile keys。 “品牌知名度”。将新的profile key分配给相关页面,并为其指定一个分数。 10.这意味着每次用户访问该页面时,他们都会获得“品牌知名度”中的10分。

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

我写了一篇关于这个的博客,如果you need more info