现在我正在研究 sitecore 项目,我需要在不在子布局上的记录上添加个性化。例如,我的项目是基于报告的,我想显示报告给出以下标准。
- 如果是注册用户,则报告根据客户兴趣显示。(客户因注册而添加的客户兴趣。)
- 如果是匿名用户,报告会根据客户所在的国家/地区显示(我们如何获取匿名用户的客户所在国家/地区?)
- 从 cookie 的最后搜索信息中获取报告并显示结果。
请帮我解决上述情况。提前致谢。
现在我正在研究 sitecore 项目,我需要在不在子布局上的记录上添加个性化。例如,我的项目是基于报告的,我想显示报告给出以下标准。
请帮我解决上述情况。提前致谢。
个性化可以通过以下方式实现:
答案 2:
使用 Geo IP Lookup Data 收集您所关注的国家/地区信息。因此,地理 IP 查找数据通过第三方网络服务提供给 Sitecore Engagement Analytics。地理 IP 数据存储在 Analytics 数据库中,因此不必为回访者执行查找。请记住,默认安装仅附带第三方 Web 服务的试用版,因此需要付费。
参与分析 API 主要用于访问访问者数据,使用
以下是访问 GEO IP 数据的方式:
public class GeoIPTracker : Sitecore.Web.UI.WebControl
{
protected override void DoRender(System.Web.UI.HtmlTextWriter output)
{
string ip = new IPAddress(Tracker.CurrentVisit.Ip).ToString();
if (Tracker.CurrentVisit == null)
return;
if (!Tracker.CurrentVisit.UpdateGeoIpData())
output.Write("GeoIP information not " + "available within prescribed time.<br/>");
else if (Tracker.CurrentVisit.BusinessName == "IP_NOT_FOUND" || Tracker.CurrentVisit.BusinessName == "N/A")
output.Write("GeoIP information not avaialble for " + ip + ".<br/>");
else if (String.IsNullOrEmpty(Tracker.CurrentVisit.BusinessName))
output.Write("No business name in GeoIP data for " + ip + " (error contacting provider).<br/>");
else
output.Write("Business name from GeoIP record: " + Tracker.CurrentVisit.BusinessName + ".<br/>");
}
}
答案1:
您可以使用存储在跟踪字段中的数据并获取有关您的注册用户个人资料的特定信息。
再次参与分析 API 的类,如
应该为您提供足够的数据来使用,以便可以自定义报告显示。
以下是访问配置文件数据的方式:
using System.Linq;
using Sitecore.Analytics.Data;
using Sitecore.Data;
using Sitecore.Data.Fields;
using Sitecore.Data.Items;
using Sitecore.Diagnostics;
public class Profile : Sitecore.Web.UI.WebControl
{
protected override void DoRender(System.Web.UI.HtmlTextWriter output)
{
Item homeItem = Sitecore.Data.Database.GetDatabase("master").GetItem("/sitecore/content/Home");
Field innerField = homeItem.Fields["__Tracking"];
if (innerField == null)
{
Log.Error(string.Format("Tracking field was not found in item '{0}' ('{1}')", homeItem.ID, homeItem.Paths.FullPath), this);
output.WriteLine("No profile values.<br/>");
}
else
{
TrackingField trackingField = new TrackingField(innerField);
ContentProfile profile = trackingField.Profiles.FirstOrDefault(profileData => profileData.Name.Equals("Score") && profileData.IsSavedInField);
output.WriteLine("Profile " + profile.Name + "<br/>");
ContentProfileKeyData[] profileKeys = profile.Keys;
foreach (ContentProfileKeyData profileKey in profileKeys)
{
output.WriteLine("Profile key name " + profileKey.Name + "<br/>");
output.WriteLine("Profile key value " + profileKey.Value + "<br/>");
}
}
}
}
让我知道这是否有帮助。