2017-07-26 7 views
2

から変更できません。すべてのマイページのSiteCore 8.0(アップデート3)のレイアウトをコードの背後から変更しようとしています。 私はそれにレイアウトリゾルバパイプラインを使用しています。 私は&の変更されたパスを表示できますが、UIでレイアウトを更新することはできません。私はグーグルで様々な投稿を見てきましたが、同じことをやっている人はかなり古いです(年齢2〜3歳)。SiteCore 8.0(アップデート3)のmvcレイアウトをコード

は、以下の私のレイアウトリゾルバパイプラインコード

public class LayoutResolver : HttpRequestProcessor 
{ 
    public LayoutResolver() 
    { 
     System.Diagnostics.Trace.WriteLine("PipeLine: ctor() has been called"); 
    } 
    /// <summary> 
    /// Gets the layout for the page 
    /// </summary> 
    /// <param name="args"></param> 
    public override void Process(HttpRequestArgs args) 
    { 
     System.Diagnostics.Trace.WriteLine("PipeLine: This is atleast called"); 
     Assert.ArgumentNotNull(args, "args"); 
     if (!CanProcess()) 
     { 
      return; 
     } 
     Context.Page.FilePath = "/Views/Shared/BusinessLayout_Two.cshtml"; 
    } 

    private static bool CanProcess() 
    { 
     return Context.Database != null 
       && !IsCore(Context.Database); 
    } 
    private static bool IsCore(Database database) 
    { 
     return database.Name == Constants.CoreDatabaseName; 
    } 
} 

EDITです:configに私のリゾルバレジスタを示しshowconfig.config。 SiteCoreSample.Helpers.LayoutResolverが私のリゾルバです。

<processor type="Sitecore.Pipelines.HttpRequest.LayoutResolver, Sitecore.Kernel"/> 
<processor type="SiteCoreSample.Helpers.LayoutResolver, SiteCoreSample" patch:source="Sitecore.Mvc.config"/> 
<processor type="Sitecore.Mvc.Pipelines.HttpRequest.TransferMvcLayout, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/> 
<processor type="Sitecore.Mvc.Pipelines.HttpRequest.TransferControllerRequest, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/> 
<processor type="Sitecore.ExperienceEditor.Pipelines.HttpRequest.CheckDevice, Sitecore.ExperienceEditor" patch:source="Sitecore.ExperienceEditor.config"/> 
<processor type="Sitecore.Pipelines.HttpRequest.PageEditorHandleNoLayout, Sitecore.ExperienceEditor" patch:source="Sitecore.ExperienceEditor.config"/> 
<processor type="Sitecore.ExperienceExplorer.Business.Pipelines.HttpRequest.ExecuteRequest, Sitecore.ExperienceExplorer.Business" patch:source="Sitecore.ExperienceExplorer.config"/> 

Debug screen shot

+1

問題は何ですか?例外?何もない?ログには何もありませんか?あなたのコードにLog.Infoを追加し、それがそこにあるかどうか確認できますか?新しいプロセッサをSitecore構成に追加しましたか?あなたは '/ sitecore/admin/showconfig.aspx'を開いたときにそれを見ることができますか? –

+0

@MarekMusielak:何も起こりません。デバッグビューで自分の値を変数に設定できますが、正面図にレイアウトが反映されません。 例外は発生しません。コードごとに実行されますがUIでは反映されません。 設定がshowconfig.aspxで更新され、EDITEDで更新されました。 –

+0

'Sitecore.Pipelines.HttpRequest.LayoutResolver'の後と' TransferMvcLayout'プロセッサの前に直接追加しようとしますか? –

答えて

5

あなたは、パイプラインの異なるセットにprocesorsを追加する必要がMVCを使用しているので、あなたが言及LayoutResolverパイプラインは、Webフォームプロジェクトにのみ関連..です

私はあなたをお勧めしますセカンダリMVCレイアウト用に別のLayoutアイテムを/sitecore/layout/Layoutsの下に作成します。以来、

<mvc.getPageRendering> 
    <processor type="MyProject.CMS.Custom.Pipelines.GetPageRendering.GetCustomLayoutRendering, MyProject.CMS.Custom"/> 
</mvc.getPageRendering> 

それはnullにargs.Result.Rendererを設定することが重要です:

using System; 
using Sitecore; 
using Sitecore.Mvc.Pipelines.Response.GetPageRendering; 

namespace MyProject.CMS.Custom.Pipelines.GetPageRendering 
{ 
    public class GetCustomLayoutRendering : GetPageRenderingProcessor 
    { 
     public override void Process(GetPageRenderingArgs args) 
     { 
      if (args.Result == null) 
       return; 

      if (!ShouldSwitchLayout()) //or whatever your custom logic is 
       return; 

      args.Result.LayoutId = new Guid("{guid-to-alt-layout}"); 
      args.Result.Renderer = null; 
     } 
    } 
} 

とパッチmvc.getPageRenderingパイプライン内のプロセッサ:その後、必要に応じて二次一つにレイアウト項目を切り替えますプロセッサを作成しますレンダリングを強制的に再設定し、設定したIDから代替レイアウトを使用します。

+0

私はしようと、すぐにあなたに戻ってきます –

+0

素晴らしい!それは動作し、私は3日以来それに乗っていた、あなたは私の一日を作った! + 1. + 2、.. + n :) –

関連する問題