Персонализация в SItecore

Я хочу отобразить какой-то другой подслой, если пользователь посещал какую-то страницу более 2 раз, поэтому я хочу использовать эти правила "где число посещений сравнивается с числом", но я не представляю, как я могу его использовать? Я пытался добавить это правило и заменить "число" на 2, но оно не работает.

2 ответа

Как сказал Марек, это невозможно при условии, которое вы используете. Однако вы можете изменить условие правила, чтобы достичь этого, посмотрев на страницу 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;
    }
}

Как сказал Марек Мусиелак, Where the visit no. compares to .. связанные с посещением сайта, а не отдельной страницы.

Я посмотрел в Sitecore API, его Tracker Пространство имен и ближайшее свойство, которое я могу найти для отдельных просмотров страниц, VisitPageIndex но декомпиляция кода и проверка в MongoDB показывает, что это был только индекс страницы, просмотренной для этого посещения сайта, так что это не сработает для вас.

Ищу в MongoDB нет свойств для хранения просмотров страниц, но он хранит Pages просмотрено для Interactions так что вы можете написать собственное правило, подсчитывающее, сколько раз эта страница находится в массиве страниц

например

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

Альтернативный вариант, если вы не хотите писать пользовательские, - это немного изменить свой подход к работе сканирования персонализации Sitecore из коробки.

Вы хотите использовать или создать profile keys в Marketing Centre например, "узнаваемый бренд". Назначьте свой новый profile key на страницу, о которой идет речь, и присвойте ей оценку, например, 10. Это означает, что каждый раз, когда пользователь посещает эту страницу, ему присваивается 10 баллов в разделе "Информация о бренде".

Теперь немного о персонализации. Создать новое правило персонализации на существующем sublayout с помощью "где значение конкретного ключа профиля сравнивается с конкретным значением" установите его, чтобы скрыть, если оценка greater than or equal to 20. Создайте другой, чтобы показать ваш новый sublayout если значение greater than or equal to 20.

Я написал блог об этом, если вам нужно больше информации

Другие вопросы по тегам