在不重定向的情况下更改Sitecore项目 [英] Change sitecore item without redirect

查看:22
本文介绍了在不重定向的情况下更改Sitecore项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在ItemResolver之后插入了一个自定义管道处理器,在该处理器中,我用内容编辑器从拖放链接中选择的新项覆盖当前上下文项。

如果我通过网站和处理器通过普通请求转到动态项,并更改上下文项,它仍会呈现相同项:

public override void Process(HttpRequestArgs args)
{
  // some code
  Context.Item = dropLink.TargetItem;
}

奇怪的是,如果我通过Item API发出请求,Sitecore会成功更改项目

//api call
Context.Item = Context.Database.SelectSingleItem("fast:/sitecore/content/mysite/dynamicitem");

这是我的配置文件:

<pipelines>
 <httpRequestBegin>
   <processor  patch:after="* @type='Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel']"  type="MyDll.Web.Pipelines.LandingPageResolver,MyDll.Web" />
 </httpRequestBegin>
</pipelines>

mvc

由于您使用的是推荐答案,因此(再次)使用一组不同的管道来解析该项,因此您需要改为将其修补到其中。

GetFromRouteUrl管道中的GetFromRouteUrl处理器将args.Result设置为与请求的URL匹配的项目,然后最终设置为Context.Item,因此它实际上会根据URL将项目重置回"正确"的项目,并覆盖您先前所做的更改。

您需要向mvc.getPageItem添加一个需要的处理器,并使用一些逻辑检查上下文项是否已解析。

更新ItemResolver中的代码并存储一个布尔值,以指示您已使用自定义逻辑进行解析,这样就不必运行解析逻辑两次:

public override void Process(HttpRequestArgs args)
{
  // some code
  Context.Item = dropLink.TargetItem;
  Context.Items["custom::ItemResolved"] = true;
}

创建检查自定义逻辑是否已解析项目的新类:

public class CheckItemResolved: GetPageItemProcessor
{
  public override void Process(GetPageItemArgs args)
  {
    if (args.Result == null)
    {
        var resolved = Sitecore.Context.Items["custom::ItemResolved"];
        if (MainUtil.GetBool(resolved, false))
        {
            // item has previously been resolved
            args.Result = Sitecore.Context.Item;
        }
    }

    return;
  }
}

然后打补丁:

<pipelines>
  <mvc.getPageItem>
    <processor type="MyProject.Custom.Pipelines.CheckItemResolved, MyProject.Custom"
        patch:before="*[@type='Sitecore.Mvc.Pipelines.Response.GetPageItem.GetFromRouteUrl, Sitecore.Mvc']" />
  </mvc.getPageItem>
</pipelines>
紧跟在GetFromFromUrl()之后的管道是args.Result,它通常会通过重新解析项目来设置args.Result。通过将其设置回Context.Item,该处理器将提早中断,而不会影响您以前的逻辑。

您可以找到有关MVC and Pipelines in the documentation的更多详细信息。

这篇关于在不重定向的情况下更改Sitecore项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆