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

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


person Swati Gupta    schedule 06.03.2016    source источник
comment
Какую версию Sitecore 8 вы используете? Что вы имеете в виду, говоря, что я понятия не имею, как я могу его использовать. Вы настроили правило в подмакете и опубликовали его?   -  person Ian Graham    schedule 06.03.2016
comment
Здесь есть хорошая статья о настройке персонализации — nonlinearcreations.com/Digital/how-we-think/articles/2014/06/   -  person Ian Graham    schedule 06.03.2016
comment
Правило Where the visit no. compares to ... означает, что это n-е посещение сайта пользователем, а не то, что пользователь открывал одну из страниц несколько раз.   -  person Marek Musielak    schedule 06.03.2016


Ответы (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;
    }
}
person Ian Graham    schedule 06.03.2016
comment
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)) - person Jonathan Robbins; 06.03.2016

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

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

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

e.g.

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.

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

person Jonathan Robbins    schedule 06.03.2016