2017-06-21 11 views
3

は、私が探しています何の要件に合います。パーソナライゼーションを使用して、ページに初めてアクセスしたときにページにモジュールを表示させようとしています。現在のセッション内のページへのその後の訪問は、モジュールをレンダリングしません。サイトコアパーソナ最初の訪問ルール

は私がルールに建てられたと思っ働くだろう「どこ[特定のページ]は現在の訪問中に訪問されました」が、それは私のシナリオではありません。 [特定のページ]パラメータは、現在のページはありませんが、それは私が必要なものでなければ、それは動作します。

ルールが検証される前に訪問が記録されているように見えるので、ルールが最終的に検証されると、実際にページが訪問されたと考えられます。

カスタムルールを作成するよりも、他の任意の考え?前もって感謝します。

+0

あなたは、レンダリングのためのパーソナライゼーションダイアログを投稿してくださいできますか?レイアウトのの@ Html.Sitecore()。VisitorIdentification()ですか? –

+0

は@NathanHaseはい、JSの参照が頭にあり、パーソナライゼーションは、レンダリングに適用されます。パーソナライゼーションが機能している私のシナリオにはルールがないと思う。 – mluker

答えて

3

私は何もOOTBはサイトコアでないと思います。そうです - Sitecoreは最初にページ訪問をカウントしてからルールを実行します。

私はあなたが必要なものを記述したブログ記事を作成しました:ショートカットでhttps://www.skillcore.net/sitecore/sitecore-rules-engine-has-visited-certain-page-given-number-of-times-condition

テキスト:[ページID、ツリー、

  1. は、新たな条件項目を作成します。ルート/コンテンツ= /サイトコア、特定]ページ[OperatorId、演算子を訪問されましたが,,]に比較して、[インデックス、整数,,数]回現在の訪問

    標準中E:YourAssembly.YourNamespace.HasVisitedCertainPageGivenNumberOfTimesCondition、YourAssembly

  2. 値を使ってコンポーネントをカスタマイズするためにそれを使用します。

    [YOUR_PAGE]ページが訪問された

    [等しいTO]現在の訪問

    中[1]回
  3. コードを作成します。

public class HasVisitedCertainPageGivenNumberOfTimesCondition<T> : OperatorCondition<T> where T : RuleContext 
{ 
    public string PageId { get; set; } 
    public int Index { get; set; } 

    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"); 

     Guid pageGuid; 

     try 
     { 
      pageGuid = new Guid(PageId); 
     } 
     catch 
     { 
      Log.Warn(string.Format("Could not convert value to guid: {0}", PageId), GetType()); 
      return false; 
     } 

     var pageVisits = Tracker.Current.Session.Interaction.GetPages().Count(row => row.Item.Id == pageGuid); 

     switch (GetOperator()) 
     { 
      case ConditionOperator.Equal: 
       return pageVisits == Index; 
      case ConditionOperator.GreaterThanOrEqual: 
       return pageVisits >= Index; 
      case ConditionOperator.GreaterThan: 
       return pageVisits > Index; 
      case ConditionOperator.LessThanOrEqual: 
       return pageVisits <= Index; 
      case ConditionOperator.LessThan: 
       return pageVisits < Index; 
      case ConditionOperator.NotEqual: 
       return pageVisits != Index; 
      default: 
       return false; 
     } 
    } 
} 
+0

ありがとう、本当にありがとう。これはまさに私が探していたものです。 – mluker

関連する問題