2017-06-21 2 views
3

Je me demande si l'une des règles intégrées pour la personnalisation dans Sitecore 8.2 correspond aux exigences de ce que je recherche. En utilisant la personnalisation, j'essaie de faire apparaître un module sur une page la première fois que vous visitez la page. Toute visite ultérieure à la page dans la session en cours ne rendrait pas le module.Sitecore Personnalisation Première visite Règle

Je pensais que le construit en règle « où la [page spécifique] a été visité lors de la visite actuelle » fonctionnerait, mais il ne fonctionne pas dans mon scénario. Cela fonctionne si le [page spécifique] n'est pas la page en cours mais ce n'est pas ce dont j'ai besoin.

Il semble que la visite soit enregistrée avant que la règle ne soit validée. Ainsi, lorsque la règle est finalement validée, elle pense que la page a déjà été visitée alors qu'en réalité, il s'agit de la première visite.

Avez-vous d'autres idées que de créer une règle personnalisée? Merci d'avance.

+0

pouvez-vous s'il vous plaît poster la boîte de dialogue de personnalisation pour le rendu? est le @ Html.Sitecore(). VisitorIdentification() dans le de la mise en page? –

+0

@NathanHase oui, la référence JS est dans la tête et la personnalisation est appliquée au rendu. La personnalisation fonctionne Je ne pense pas qu'il y ait une règle pour mon scénario. – mluker

Répondre

3

Je ne pense pas qu'il y ait quelque chose OOTB dans Sitecore. Vous avez raison - Sitecore compte d'abord la visite de la page, puis exécute la règle.

J'ai créé un blog décrivant ce que vous avez besoin: https://www.skillcore.net/sitecore/sitecore-rules-engine-has-visited-certain-page-given-number-of-times-condition

En raccourci:

  1. Créer un nouvel élément de l'état:

    Texte: où [PageId, Arbre, root =/sitecore/content, spécifique] a été visité [OperatorId, Operator, compare à] [Index, Entier, nombre] fois pendant la visite en cours

    Typ e: YourAssembly.YourNamespace.HasVisitedCertainPageGivenNumberOfTimesCondition, votre_assembly

  2. Utilisez-le pour personnaliser votre appareil avec des valeurs:

    où le [YOUR_PAGE] a été visité [ÉGAL] [1] fois au cours de la visite actuelle

  3. Créer le code:

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

Merci, je l'apprécie vraiment. Cela fait exactement ce que je cherchais. – mluker