Управление в Orchard CMS: создание рецептов

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

В предыдущих статьях цикла мы рассмотрели расширение Orchard CMS через создание виджетов, модулей, пакетов и тем оформления. В нескольких следующих статьях мы рассмотрим управление системой на базе Orchard CMS. В этой статье речь пойдет о создании рецептов для Orchard – специального механизма, который позволяет предварительно настроить систему перед развертыванием сайта. Эта статья основана на оригинальной статье Making a Website Recipe.

Создание рецепта сайта

Orchard упрощает процесс установки нового веб-сайта, позволяя использовать рецепты. Рецепт – это XML-файл, который содержит стартовую конфигурацию для сайта Orchard. Когда вы запускаете Orchard в первый раз, вы имеете возможность выбрать рецепт, которые наиболее полно подходит под ваши требования. Например, если вы хотите развернуть блог, вы можете выбрать рецепт “Блог” и большая часть конфигурации блога будет автоматически выполнена.

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

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

Использование рецепта для создания сайта

Когда вы впервые устанавливаете веб-сайт, на экране установки есть возможность выбрать рецепт из списка рецептов. Вы можете выбрать наиболее подходящий вам рецепт.

image

Базовый список содержит следующие рецепты:

  • Default – рецепт по умолчанию, который включает в себя страницы, блоги, различные контентные типы, комментарии, теги, виджеты и простую навигацию;
  • Blog – рецепт, который предлагает только функции для персонального блога;
  • Core – рецепт, который предлагает Orchard с ограниченной функциональностью.

После того, как вы выберите рецепт и нажмете “Finish Setup”, Orchard создаст сайт на основе выбранного рецепта и откроет главную страницу сайта.

Как работают рецепты

Рецепт Orchard – это XML-файл, который содержит информацию о конфигурации веб-сайта. Следующий пример показывает контент рецепта по умолчанию.

 <?xml version="1.0"?>
<Orchard>
  <Recipe>
    <Name>Default</Name>
    <Description>The default recipe for an Orchard site that includes pages, blogs, custom content types, comments, tags, widgets and basic navigation.</Description>
    <Author>The Orchard Team</Author>
    <WebSite>https://orchardproject.net</WebSite>
    <Tags></Tags>
    <Version>1.0</Version>
  </Recipe>
  
  <Feature enable="Orchard.Blogs,Orchard.Comments,Orchard.Tags,
                   Orchard.Lists,TinyMce,Orchard.Media,Orchard.MediaPicker,Orchard.PublishLater,
                   Orchard.jQuery,Orchard.Widgets,Orchard.ContentTypes,
                   Orchard.Scripting,Orchard.Scripting.Lightweight,
                   PackagingServices,Orchard.Packaging,Gallery,Gallery.Updates,
                   TheThemeMachine" />
  
  <Metadata>
    <Types>
      <Page ContentTypeSettings.Draftable="True" TypeIndexing.Included="true">
        <TagsPart />
        <LocalizationPart />
      </Page>
      <BlogPost ContentTypeSettings.Draftable="True" TypeIndexing.Included="true">
        <CommentsPart />
        <TagsPart />
        <LocalizationPart />
      </BlogPost>
    </Types>
    <Parts>
      <BodyPart BodyPartSettings.FlavorDefault="html" />
    </Parts>
  </Metadata>

  <Settings />

  <Migration features="*" />

  <Command>
    layer create Default /LayerRule:"true"
    layer create Authenticated /LayerRule:"authenticated"
    layer create Anonymous /LayerRule:"not authenticated"
    layer create Disabled /LayerRule:"false"
    layer create TheHomepage /LayerRule:"url '~/'"
    page create /Slug:"welcome-to-orchard" /Title:"Welcome to Orchard!" /Path:"welcome-to-orchard" /Homepage:true /Publish:true /UseWelcomeText:true
    widget create HtmlWidget /Title:"First Leader Aside" /Zone:"TripelFirst" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
    widget create HtmlWidget /Title:"Second Leader Aside" /Zone:"TripelSecond" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
    widget create HtmlWidget /Title:"Third Leader Aside" /Zone:"TripelThird" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
    menuitem create /MenuPosition:"1" /MenuText:"Home" /Url:"" /OnMainMenu:true
  </Command>
</Orchard>

Следующие разделы файла наиболее важны:

  • Recipe – раздел содержит метаданные о рецепте, такие как название и описание;
  • Feature – раздел перечисляет модули, которые необходимо включить;
  • Metadata – раздел содержит информацию для типов, частей и полей, которые содержатся в Orchard;
  • Settings – раздел позволяет настроить параметры сайта;
  • Command – раздел содержит список команд, которые необходимо выполнить на этапе установки сайта. Для больше информации о командах Orchard смотрите статью Управление в Orchard CMS: утилита командной строки.

Создание собственного рецепта

Вы можете создать собственный рецепт для Orchard, который может быть добавлен в список рецептов в окне первичной установки сайта или добавлен в виде пользовательского модуля. Рецепты добавленные в первичную установку могут быть вызваны только на этапе установки. Рецепты добавленные в виде модулей могут быть вызваны пользователями в любое время после установки.

Для создания собственного рецепты вы можете выбрать существующий рецепт, наиболее подходящий для ваших целей. В следующем примере демонстрируется, как начать создание рецепта на основе рецепта по умолчанию (default.recipe.xml), добавить в него модуль Bing.Maps и тему оформления, которые будут загружены и установлены на этапе установки сайта. Этот рецепт создает блог и страницу, которая отображает виджет карты. Кроме того, рецепт добавляет слои и элементы меню для блога и страницы карты.

 <?xml version="1.0"?>
<Orchard>
  <Recipe>
    <Name>Custom Recipe</Name>
    <Description>A recipe that includes a landing page with blog on a second tab.</Description>
    <Author>The Orchard Team</Author>
    <WebSite>https://orchardproject.net</WebSite>
    <Tags></Tags>
    <Version>1.0</Version>
  </Recipe>

  <Module packageId="Orchard.Module.Bing.Maps" />

  <Theme packageId="Orchard.Theme.Dark" current="true" />

  <Feature enable="Orchard.Blogs,Orchard.Comments,Orchard.Tags,
                   Orchard.Lists,TinyMce,Orchard.Media,Orchard.MediaPicker,Orchard.PublishLater,
                   Orchard.jQuery,Orchard.Widgets,Orchard.Widgets.PageLayerHinting,Orchard.ContentTypes,
                   Orchard.Scripting,Orchard.Scripting.Lightweight,
                   PackagingServices,Orchard.Packaging,Gallery,Gallery.Updates,
                   TheThemeMachine,Bing.Maps" />

  <Metadata>
    <Types>
      <Page ContentTypeSettings.Draftable="True" TypeIndexing.Included="true">
        <TagsPart />
        <LocalizationPart />
      </Page>
      <BlogPost ContentTypeSettings.Draftable="True" TypeIndexing.Included="true">
        <CommentsPart />
        <TagsPart />
        <LocalizationPart />
      </BlogPost>
    </Types>
    <Parts>
      <BodyPart BodyPartSettings.FlavorDefault="html" />
    </Parts>
  </Metadata>

  <Settings />

  <Migration features="*" />

  <Command>
    layer create Default /LayerRule:"true"
    layer create Authenticated /LayerRule:"authenticated"
    layer create Anonymous /LayerRule:"not authenticated"
    layer create Disabled /LayerRule:"false"
    layer create TheHomepage /LayerRule:"url '~/'"
    layer create Blog /LayerRule:"url '~/Blog'"
    layer create Maps /LayerRule:"url '~/Maps'"
    page create /Slug:"welcome-to-orchard" /Title:"Welcome to Orchard!" /Path:"welcome-to-orchard" /Homepage:true /Publish:true /UseWelcomeText:true
    blog create /Slug:"blog" /Title:"Blog" /Homepage:false /Description:"This is your Orchard Blog."
    page create /Slug:"maps" /Title:"Bing Maps" /Path:"bing-maps" /Homepage:false /Publish:true /UseWelcomeText:false
    widget create HtmlWidget /Title:"First Leader Aside" /Zone:"TripelFirst" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
    widget create HtmlWidget /Title:"Second Leader Aside" /Zone:"TripelSecond" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
    widget create HtmlWidget /Title:"Third Leader Aside" /Zone:"TripelThird" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
    menuitem create /MenuPosition:"1" /MenuText:"Home" /Url:"" /OnMainMenu:true
    menuitem create /MenuPosition:"2" /MenuText:"Blog" /Url:"~/Blog" /OnMainMenu:true
    menuitem create /MenuPosition:"3" /MenuText:"Maps" /Url:"~/Maps" /OnMainMenu:true
  </Command>
</Orchard>

Обратите внимание на следующие изменения, которые были произведены над рецептом по умолчанию:

  • элемент Module определяет модуль, который будет загружен из галереи Orchard на создаваемый сайт. Здесь не включаются функции модуля, он лишь загружается. Для того, чтобы выключить функции добавьте элемент Feature, как показано на примере;
  • элемент Theme определяет тему, которая будет загружена на сайт из галереи Orchard. Если атрибут current установлен в true, загруженная тема будет считаться темой оформления по умолчанию. Иначе тема будет просто загружена. Так же возможно управлять состоянием темы через атрибут enable, если он установлен в true, то тема будет включена, иначе – выключена. Важно: элементы Module и Theme должны быть определены сразу после элемента Recipe;
  • команда layer create добавлена для создания слоев Blog и Map;
  • команда blog create добавлена для создания блога;
  • команда page create добавлена для создания страницы Maps;
  • команда menuitem create добавлена для создания пунктов меню Blog и Maps.

Элементы Module и Theme дополнительно содержат атрибут version. Если этот атрибут указан, то из галереи Orchard будет загружен модуль или тема определенной версии. Кроме того, у обоих элементов есть атрибут repository. По умолчанию этот атрибут указывает на галерею Orchard, но вы можете указать любой другой URL пользовательской галереи.

Для того чтобы добавить ваш рецепт на стартовую страницу Orchard разместите XML-файл папке Orchard.Web/Modules/Orchard.Setup/Recipes. Теперь, когда вы начнете установку сайта, ваш рецепт будет доступен в списке рецептов.

image

Импорт и экспорт рецептов

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

Для того, чтобы включить модуль откройте панель администрирования и перейдите в раздел Modules. Здесь выберите вкладку Features и найдите функцию Import Export. Включите ее с помощью ссылки Enable.

image

Для экспорта рецепта откройте панель администрирования и выберите раздел Import/Export. Перейдите на вкладку Export, затем выберите типы, метаданные, данные и настройки необходимые для экспорта. Когда вы закончите выбрать нажмите Export.

image

Для импорта рецепта перейдите на вкладку Import. С помощью элемента управления найдите рецепт на локальном компьютере и нажмите Import.

image

Создание специального дистрибутива Orchard

Рецепты упрощают создание специальных дистрибутивов Orchard. С помощью Orchard и определенного набора модулей вы можете настроить свои собственную версию платформы Orchard оптимизированную под любой тип веб-сайтов.

Для создания дистрибутива Orchard:

  1. загрузите последнюю сборку исходных кодов Orchard;
  2. создайте собственный рецепт и разместите его в папке Orchard.Web/Modules/Orchard.Setup/Recipes. Если вы хотите, чтобы ваш рецепт был единственным выбором, то удалите из папки все остальные рецепты;
  3. добавьте в папку Orchard.Web/Modules необходимые модули;
  4. скомпилируйте проект;
  5. распространяйте все файлы из папки Orchard.Web в качестве собственного дистрибутива.