2013-07-23 4 views
2

У меня есть сайт, для которого требуется функциональность «Тема». Итак, я создал кучу просмотров в папке «Темы». например:Sitecore MVC - место динамического просмотра

/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 и Menu просмотра визуализаций и установите Path поле для /Themes/Theme 1/Views/Content.cshtml и /Themes/Theme 1/Views/Menu.cshtml соответственно.

Мне нужно заменить «Тема 1» на «Тема 2» где-то в конвейере sitecore, чтобы я мог задавать тему глобально и динамически загружать представления, соответствующие этой теме (вместо создания нескольких «Меню», и «Контент»).

Есть ли способ сделать это?

ответ

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

Надежда, что помогает кому-то.

Смежные вопросы