Я хочу отобразить какой-то другой подмакет, если пользователь посетил какую-то страницу более 2 раз, поэтому я хочу использовать это правило «где номер посещения сравнивается с номером», но я не знаю, как я могу его использовать? Я пытался добавить это правило и заменить «число» на 2, но оно не работает.
Персонализация в Sitecore
Ответы (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;
}
}
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.
Я написал об этом в блоге, если вам нужна дополнительная информация
Where the visit no. compares to ...
означает, что это n-е посещение сайта пользователем, а не то, что пользователь открывал одну из страниц несколько раз. - person Marek Musielak   schedule 06.03.2016