2

「テーマ」機能を必要とするサイトがあります。そこで、「テーマ」フォルダーにたくさんのビューを作成しました。例えば:

/Themes/Theme 1/Views/Content.cshtml
/Themes/Theme 1/Views/Menu.cshtml
/Themes/Theme 2/Views/Content.cshtml
/Themes/Theme 2/Views/Menu.cshtml
/Themes/Theme 3/Views/Content.cshtml
/Themes/Theme 3/Views/Menu.cshtml

また、レンダリングを作成Contentして表示し、フィールドをそれぞれおよび に設定しました。MenuPath/Themes/Theme 1/Views/Content.cshtml/Themes/Theme 1/Views/Menu.cshtml

必要なのは、サイトコア パイプラインのどこかで「テーマ 1」を「テーマ 2」に置き換えて、テーマをグローバルに設定し、そのテーマに対応するビューを動的にロードできるようにすることです (複数の「メニュー」と「コンテンツ」を作成する代わりに)レンダリングを表示します)。

それを行う方法はありますか?

4

1 に答える 1

4

だから、これは私がやったことです:

RenderRenderingパイプライン プロセスを処理するクラスを作成します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sitecore.Diagnostics;
using Sitecore.Caching;
using Sitecore.Mvc.Extensions;
using Sitecore.Mvc.Presentation;
using Sitecore.Sites;

namespace MyNamespace.Pipelines.Response.RenderRendering
{
    public class ReplacePathProcessor : Sitecore.Mvc.Pipelines.Response.RenderRendering.RenderRenderingProcessor
    {
        public override void Process(Sitecore.Mvc.Pipelines.Response.RenderRendering.RenderRenderingArgs args)
        {
            var viewRenderer = args.Rendering.Renderer as ViewRenderer;
            if (viewRenderer != null && viewRenderer.ViewPath.StartsWith("%Theme%"))
            {
                // Get the current site
                var site = Sitecore.Context.Site;
                // Get the master database
                var database = Sitecore.Data.Database.GetDatabase("master");
                // Get the root item
                var rootItem = database.GetItem(site.RootPath);
                // replace the path
                viewRenderer.ViewPath = viewRenderer.ViewPath.Replace("%Theme%", rootItem["Theme"]);
            }
        }
    }
}

構成インクルードを追加する

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <mvc.renderRendering>
        <processor type="MyNamespace.Pipelines.Response.RenderRendering.ReplacePathProcessor, __Code">
          <patch:attribute name="type">MyNamespace.Pipelines.Response.RenderRendering.ReplacePathProcessor, __Code</patch:attribute>
        </processor>
      </mvc.renderRendering>
    </pipelines>
  </sitecore>
</configuration>

を次のように変更MvcSettings.RenderersViewFolderします。

<setting name="Mvc.RenderersViewFolder" value="/Themes" />

ViewPathすべてのビュー のフィールドを次の形式を使用するように変更します。%Theme%/Views/{ViewName}.cshtml

それが誰かを助けることを願っています。

于 2013-07-23T16:35:15.910 に答える