Sitecore 7.2 MVC和DMS
我正在尝试使用MVC在Sitecore 7.2上设置DMS。我可以通过页面编辑器设置个性化规则,但当我以普通用户的身份查看页面时,这些规则不会运行。我已检查了以下各项:Sitecore 7.2 MVC和DMS,sitecore,sitecore-dms,sitecore7.2,Sitecore,Sitecore Dms,Sitecore7.2,我正在尝试使用MVC在Sitecore 7.2上设置DMS。我可以通过页面编辑器设置个性化规则,但当我以普通用户的身份查看页面时,这些规则不会运行。我已检查了以下各项: Analytics.Enabled设置为true @Html.Sitecore().VisitorIdentification()已添加到主布局中 分析数据库已设置 日志中未显示任何错误 我已启用配置文件Sitecore.MvcAnalytics.config 已为站点启用分析功能 我的条件在WebForms中有效,只有MVC不
我们已尝试设置干扰最小的测试 我无法使@Html.Sitecore().VisitorIdentification()正常工作。我们只是把
<sc:visitoridentification runat="server" />
在
</head>
您是否查看了源代码以查看@Html.Sitecore().VisitorIdentification()是否包含它?老实说,我看不出它是如何特定于控制器渲染的。在Sitecore MVC中,控制器和视图渲染都遵循相同的管道路径。更具体地说,在
mvc.getRenderer
管道中,选择基于a/B(又名MVT)测试或个性化规则的变体作为第一步。你应该
Sitecore.Mvc.Analytics.Pipelines.Response.GetRenderer.CustomizeRendering
从Sitecore.MvcAnalytics.config
中可以看到。当它运行时,将触发mvc.customizerEntering
。我想我说的是-个性化在根据渲染类型选择特定渲染器之前发生。您可能希望查看Sitecore.Mvc.Analytics
中的Sitecore.Mvc.Analytics.Pipelines.Response.CustomizerOrdering.Personalize
,以了解Sitecore如何准确应用您的个性化规则
我知道我并不是在回答你的问题,但我自己会这么做:
- 确保有问题的渲染运行其自然过程(例如,您没有创建手动设置
的.Renderer
对象,也没有对MVC上下文进行猴子修补等)渲染
- 确认外部渲染(如果控制器渲染嵌套在另一个渲染中)未设置为缓存(如果设置为缓存,则在外部渲染兑现后,Sitecore不会再次调用内部渲染上的渲染管道。我知道这很明显,但我看到人们对此感到惊讶)
- 通过检查已发布项目中项目的
字段的原始值,仔细检查个性化规则是否像您认为的那样被记录(个性化设置不会在\u呈现
中运行,仅在预览
时运行)页面模式.IsNormal
- 确保从控制器返回时,没有发送最终通过另一个
渲染渲染管道生成标记的razor视图。例如,如果使用
包装它,它将通过自己的管道运行,并将拥有自己的RenderingView
和自己的RenderingContext
对象。个性化设置将更改控制器渲染对象上的数据源,并且您的Rendering
可能正在与您需要的@Html.Sitecore().Field()
进行对话(在控制器中记录您的渲染.Item
,并在razor中执行相同操作,以查看发生了什么情况)。上周我在博客中谈到了其中的一些内容(),如果您在页面编辑器中进行调试,您可能会看到呈现管道序列李>渲染.Item
- 如果一切看起来都正常,规则仍然神秘地没有触发,我很可能会使用我最近学到的技巧,并将Sitecore置于debug()中。不止一次地帮助我们弄清了事情的真相
<mvc.getRenderer patch:source="Glass.Mapper.Sc.Mvc.config">
<processor type="Sitecore.Mvc.Analytics.Pipelines.Response.GetRenderer.CustomizeRendering, Sitecore.Mvc.Analytics" patch:source="Sitecore.MvcAnalytics.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetViewRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetItemRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetXsltRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetControllerRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetMethodRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetUrlRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetDefaultRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
</mvc.getRenderer>
您可以在这里看到,第一个条目是分析插入以控制个性化的处理器。如果现在启用Sitecore.Forms.Mvc.config,此管道将更改为:
<mvc.getRenderer patch:source="Glass.Mapper.Sc.Mvc.config">
<processor type="Sitecore.Forms.Mvc.Pipelines.GetFormControllerRenderer, Sitecore.Forms.Mvc" patch:source="Sitecore.Forms.Mvc.config"/>
<processor type="Sitecore.Mvc.Analytics.Pipelines.Response.GetRenderer.CustomizeRendering, Sitecore.Mvc.Analytics" patch:source="Sitecore.MvcAnalytics.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetViewRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetItemRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetXsltRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetControllerRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetMethodRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetUrlRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetDefaultRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
</mvc.getRenderer>
请注意,WFFM表单MVC条目在管道的开头插入自身。这会导致问题,因为它返回渲染:
protected override Renderer GetRenderer(Rendering rendering, GetRendererArgs args)
{
if (args.Rendering.RenderingItem.ID != IDs.FormMvcInterpreterID)
return base.GetRenderer(rendering, args);
Tuple<string, string> controllerAndAction = this.GetControllerAndAction(rendering, args);
if (controllerAndAction == null)
return (Renderer) null;
string str1 = controllerAndAction.Item1;
string str2 = controllerAndAction.Item2;
FormControllerRenderer controllerRenderer = new FormControllerRenderer();
controllerRenderer.ControllerName = str1;
controllerRenderer.ActionName = str2;
return (Renderer) controllerRenderer;
}
受保护的覆盖渲染器GetRenderer(渲染渲染,GetRenderArgs args)
{
if(args.Rendering.RenderingItem.ID!=IDs.FormMVCinterretId)
返回base.GetRenderer(渲染,参数);
Tuple controllerAndAction=this.GetControllerAndAction(呈现,args);
if(controllerAndAction==null)
返回(渲染器)null;
字符串str1=controllerAndAction.Item1;
字符串str2=controllerAndAction.Item2;
FormControllerRenderer controllerRenderer=新的FormControllerRenderer();
controllerRenderer.ControllerName=str1;
controllerRenderer.ActionName=str2;
返回(渲染器)控制器渲染器;
}
CustomiseRendering处理器不执行任何操作,因为有返回的结果,因此不执行个性化:
public override void Process(GetRendererArgs args)
{
Assert.ArgumentNotNull((object) args, "args");
if (args.Result != null || args.Rendering == null || string.IsNullOrEmpty(args.Rendering["RenderingXml"]))
return;
CustomizeRenderingArgs args1 = new CustomizeRenderingArgs(args.Rendering);
args.Result = PipelineService.Get().RunPipeline<CustomizeRenderingArgs, Renderer>("mvc.customizeRendering", args1, (Func<CustomizeRenderingArgs, Renderer>) (pipelineArgs => pipelineArgs.Renderer));
}
公共覆盖无效进程(GetRenderArgs args)
{
Assert.ArgumentNotNull((object)args,“args”);
if(args.Result!=null | | args.Rendering==null | | string.IsNullOrEmpty(args.Rendering[“RenderingXml”]))
返回;
CustomizeRenderingArgs args1=新的CustomizeRenderingArgs(args.Rendering);
args.Result=PipelineService.Get().RunPipeline(“mvc.customizerEntering”,args1,(Func)(管道