Расширение Orchard CMS: создание модулей

Это продолжение цикла статей на тему разработки собственных сайтов на базе системы управления контентом Orchard CMS. Первые статьи данного цикла вы можете найти по следующим ссылкам:

В этой статье речь пойдет о расширении сайта на базе Orchard CMS через создание модулей, которые могут быть повторно использованы на других сайтах Orchard. Это статья основана на оригинальной статье Building a Hello World Module.

Введение

Модули в Orchard – это наборы расширений, которые могут быть упакованы специальным способом для повторного использования на других сайтах, работающих под управлением системы Orchard. Модули Orchard реализованы на основе концепции областей (Areas) фреймворка ASP.NET MVC. Области в ASP.NET MVC – это своего рода подсайты, которые содержат полный набор всех функций, которые позволяют работать подсайту отдельно от других разделов или компонентов сайта. Модуль в Orchard представляет собой обыкновенную область со специальным файлом манифеста. Модуль может использовать Orchard API, но не обязан этого делать.

Генерация структуры модуля

Перед тем как создать файловую структуру вашего модуля, вам необходимо загрузить, установить и включить в функцию кодогенерации в Orchard. Для подробной информации по этой функции смотрите эту статью.

Как только вы включите функцию кодогенерации в системе Orchard, откройте командную строку и создайте модуль HelloWorld  с помощью следующей команды.

codegen module HelloWorld

Модификация манифеста

Теперь у вас должна быть папка HelloWorld в папке Modules вашего проекта с сайтом Orchard. В этой папке вы сможете найти файл module.txt, откройте его и заполните так, как представлено ниже:

 name: HelloWorld
antiforgery: enabled
author: The Orchard Team
website: https://orchardproject.net
version: 0.5.0
orchardversion: 0.5.0
description: The Hello World module is greeting the world and not doing much more. 
features:
    HelloWorld:
        Description: A very simple module.
        Category: Sample

Этот текст описывает ваш модуль для системы. Например, некоторая информация из этого текста будет использована в панели администрирования при отображении модуля.

Важно. Используйте пробелы для отступов, но не используйте табуляцию.

Добавление маршрута

В качестве примера представим, что ваш модуль должен иметь возможность обработать адрес /HelloWorld относительно сайта Orchard. Для того, чтобы определить что нужно сделать, когда пользователь перешел по указанному адресу, вы должны определить маршрут. Для этого создайте файл Routes.cs в папке HelloWorld, как указано ниже:

 using System.Collections.Generic;
using System.Web.Mvc;
using System.Web.Routing;
using Orchard.Mvc.Routes;

namespace HelloWorld {
    public class Routes : IRouteProvider {
        public void GetRoutes(ICollection<RouteDescriptor> routes) {
            foreach (var routeDescriptor in GetRoutes())
                routes.Add(routeDescriptor);
        }

        public IEnumerable<RouteDescriptor> GetRoutes() {
            return new[] {
                new RouteDescriptor {
                    Priority = 5,
                    Route = new Route(
                        "HelloWorld",
                        new RouteValueDictionary {
                            {"area", "HelloWorld"},
                            {"controller", "Home"},
                            {"action", "Index"}
                        },
                        new RouteValueDictionary(),
                        new RouteValueDictionary {
                            {"area", "HelloWorld"}
                        },
                        new MvcRouteHandler())
                }
            };
        }
    }
}

Маршрут – это описание связи между адресом URL и действиями контроллера. Указанный выше код связывает адрес HelloWorld с областью HelloWorld, у которой есть контроллер Home с действием Index.

Создание контроллера

Созданный модуль содержит папку Controllers, готовую для создания новых контроллеров. Создайте в этой папке следующий файл и назовите его HomeController.cs:

 using System.Web.Mvc;
using Orchard.Themes;

namespace HelloWorld.Controllers {
    [Themed]
    public class HomeController : Controller {
        public ActionResult Index() {
            return View("HelloWorld");
        }
    }
}

Этот код определяет контроллер, который будет обрабатывать запросы для адреса HelloWorld. Действие по умолчанию – Index – запрашивает представление того, что должно быть отображено на странице по запросу пользователя.

Обратите внимание на атрибут Themed у контроллера. Этот атрибут позволяет отображать данные с текущей пользовательской темой.

Создание представления

В папке Views создайте папку Home, а в нее добавьте следующий файл с именем HelloWorld.cshtml:

 <h2>@T("Hello World!")</h2>

Этот файл определяет основное содержимое нашего представления. Все остальное содержимое страницы будет создано на основании текущей темы оформления и настроек сайта Orchard.

Обратите внимание на использование хелпер-метода T, который позволяет сделать это представление локализуемым. Это полезная функция, которую стоит иметь в виду.

Добавление новых файлов в проект

Мы практически готовы завершить создание первого модуля. Последняя оставшаяся задача – это рассказать системе о наборе файлов необходимых для создания модуля во время динамической компиляции.

Откройте файл проекта HelloWorld.csproj в любом текстовом редакторе и добавьте следующие строки после одного из тегов </ItemGroup>.

 <ItemGroup>
  <Compile Include="Routes.cs"/>
  <Compile Include="Controllers\HomeController.cs"/>
</ItemGroup>

Кроме того, добавьте следующее содержимое в секцию ItemGroup, в которой уже есть несколько тегов Content:

 <Content Include="Views\Home\HelloWorld.cshtml" />

Активация модуля

Наконец, вы должны активировать свой новый модуль. В командной строке наберите:

 feature enable HelloWorld

Так же вы можете сделать активацию через раздел Modules в панели администрирования сайта Orchard.

Использование модуля

Теперь вы можете перейти по ссылке /HelloWorld относительно вашего сайта и увидеть, что наш модуль работает и приветствует нас сообщением.

image

Заключение

В этой статье мы рассмотрели простейший пример и основы создания отдельных модулей для системы управления контентом Orchard CMS. Создать модуль для Orchard очень просто. Модули в Orchard имеют автоматическую поддержку тем оформления, механизма активации и деактивации.

В следующих статьях мы рассмотрим некоторые другие аспекты работы с модулями в Orchard CMS: упаковку, распространение, установку и управление модулями.