Введение в Umbraco CMS: основные понятия

При изучении Umbraco CMS мне очень сильно не хватало небольшого введения, где были бы изложены основные её идеи и понятия, после которого можно смотреть видео с Umbraco.com. После достаточно плотной работы с Umbraco появилась эта статья.

Содержание

Document

Umbraco CMS — это документо-ориентированная система управления контентом. Термин документо-ориентированная означает, что основным понятием системы является документ.

Document (документы) — это набор полей, содержащих данные.

Umbraco позволяет редактировать поля документа в панели управления, отображать данные документа на фронтенде с помощью шаблонов.

Дерево документов
Дерево документов

Document type

В документо-ориентированных системах каждый документ относится какому-то определённому типу. Если проводить аналогию с ООП, то тип документа — это класс, а документ — это экземпляр класса.

Document type (тип документа) определяет, какие поля будет содержать документ и каких типов будут эти поля.

Типы документа в Umbraco можно наследовать друг от друга. Это позволяет выносить общие поля в базовый тип. Это очень удобно, например, когда надо создать различные типы страниц с полями keywords и description.

Дерево типов документов
Дерево типов документов

Документы можно организовывать в древовидные структуры. Для этого типу документа можно указать, какие типы могут быть дочерними. Например, у типа "Видеогалерея" дочерним типом может быть только "Видеозапись".

Тип документа и каждое поле типа можно сопроводить комментарием. Это может быть полезно для описания того, что именно за сущность отражена в документе.

Data type

Data type (тип данных) определяет тип поля документа. Примеры типов данных в Umbraco: текстовое поле, видеозапись из Youtube, набор картинок.

Тип данных в Umbraco это пара: render control и его настройки.

Например, можно создать тип данных с контролом TinyMCE, где высота текствого поля будет 200 пикселей, и применить этот тип данных для краткого описания новости. А тип данных с тем же контролом TinyMCE, но высотой текстового поля 400 пикселей, для текста новости.

Вы можете разработать свои собственные render control'ы. Шаблон проекта для Visual Studio 2010 доступен в Visual Gallery

Template

Template (шаблон) — это ASP.NET master page, которая отвечает за отображение документа. Каждому документу можно поставить в соответствие шаблон. Кроме того, для типа документа можно определить шаблон по умолчанию. Можно ограничить набор шаблонов для конкретного типа документа.

Как и в ASP.NET, у шаблона может быть свой master page, а у того свой. Эта иерархия отображается в панели управления Umbraco.

Дерево шаблонов
Дерево шаблонов

Macro

Macro (макрос) — XSLT-преобразование, Python-скрипт или ASP.NET Control, которые служит для расширения функциональности шаблонов. Макрос может быть помещён в шаблон документа и отображать, например, форму регистрации пользователя.

Макрос с XSLT-преобразованием удобен для работы с деревом документов. Например, с помощью XSLT можно отобразить список новостей или вывести карту сайта.

Огромный плюс Umbraco в том, что данные из документа легко попадают в шаблон и макрос.

Передача поля документа content в шаблон:

<umbraco:Item ID="Content1" field="content" stripParagraph="true" runat="server"/>

Передача поля документа numberOfItems в макрос:

<umbraco:Macro ID="Macro1" Alias="XSLT_ArticleList" runat="server" numberOfItems="[#numberOfItems]"/>

В случае XSLT параметры макроса будут доступны из XML-документа, к которому применяется XSLT. В случае ASP.NET-контрола данные передаются в public свойства контрола.

(Более подробно об этом можно прочитать здесь или увидеть в видеоуроках).

Например, вам нужно вывести список новостей. Здесь хорошим планом будет создать 2 типа документа: "Список новостей" и "Новость". В тип "Новость" добавить поля "дата" и "текст новости", а у типу документа "Список новостей" добавить поле "количество новостей на странице". В этом случае документ "список новостей" будет содержать настройки макроса и их сможет легко редактировать контент-менеджер.

Данный пример иллюстрирует, что кроме содержания самого контента документы могут содержать настройки для макросов, а также выполнять функцию группировки документов в дереве.

Макросы в Umbraco позволяют использовать всю мощь XSLT. Дерево документов подаётся в XSLT-трансформацию в качестве параметра. Данные, доступные вашему XSLT, можно увидеть с помощью тривиального преобразования:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [<!ENTITY nbsp "&#x00A0;">]>
<xsl:stylesheet
  version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxml="urn:schemas-microsoft-com:xslt" xmlns:umbraco.library="urn:umbraco.library" exclude-result-prefixes="msxml umbraco.library">
  <xsl:output method="xml" omit-xml-declaration="yes"/>
  <xsl:param name="currentPage"/>
  
  <xsl:template match="/">
    
    <xsl:variable name="rootNode" select="$currentPage/ancestor-or-self::root" />
    <!-- Macro settings-->
    <xsl:copy-of select="."/>
    <!-- Document tree -->
    <xsl:copy-of select="$rootNode"/>
    <!-- Current page-->
    <xsl:copy-of select="$currentPage"/>
  </xsl:template>
 
</xsl:stylesheet>

Package

Свежеустановленная Umbraco не совсем CMS: в ней нет понятий "форум", "блог" или "новость". Если вам нужны эти сущности, то вы должны определить их с помощью документов, шаблонов и макросов. При этом вы можете определить сущности с именно теми полями, которые нужны именно для конкретного сайта. В этом огромная гибкость Umbraco.

Однако не стоит думать, что всё в Umbraco нужно создавать с нуля. Есть механизм пакетов Packages, который позволяет добавить на ваш сайт нужные типы данных, макросы и шаблоны.

Некоторые пакеты можно установить прямо из панели управления CMS. Можно попытать счастья и на сайте сообщества Our Umbraco, но там выше риск скачать пакет с багами.

Управление пакетами
Управление пакетами

Стоит всегда помнить, что пакеты могут содержать ошибки, потому надо внимательно читать страницу проекта и описание проблем. Часто фиксы известных проблем уже есть в исходниках проекта.

Пакеты так же могут быть условно бесплатными, то есть бесплатно доступна только часть функциональности. Хороший пример такого пакета, это пакет Image Gen.

Media

Разные системы управления сайтами по-разному решают задачу работы с файлами. Одни завязываются на файловую систему, другие хранят все файлы в базе.

В Umbraco CMS есть понятие Media. Это виртуальная файловая система, которая состоит из дерева документов специального вида (media type). Эти документы имеют поля тех же типов, что и обычные документы Umbraco, и могут содержать, например, ссылки на файлы в файловой системе или на видео на сервисе YouTube.

Изначально в Umbraco определены три Media-типа: Folder — виртуальная папка, File и Image хранят ссылку на файл в файловой системе. Ничего не мешает определить свои типы Media или добавить поля в существующие.

Media-типы
Media-типы

Работать с файлами через Media в Umbraco достаточно нудно, если не знать, что для загрузки файлов на сервер существует Desktop Media Uploader, для выбора файла в документе — тип данных от Digibiz, а для выбора группы файлов — uComponents: Multipicker.

Если идея виртуальной файловой системы вам не нравится, то можете использовать файлы и папки файловой системы сервера, типы данных для этого тоже есть.

Заключение

Umbraco CMS — создана подходить для широкого круга задач, потому был выбран путь документо-ориентированной системы. Фактически, Umbraco — это платформа, в которой документы и типы данных помогают отразить именно вашу предметную область, макросы и шаблоны реализуют функционал, нужный именно вам.

Umbraco имеет множество мест расширения, богатый API и открытый исходный код. Сообщество Umbraco имеет неплохой форум на котором есть описания довольно большого количества решений.

Думаю, что именно из-за своей универсальности и расширяемости Umbraco CMS нравится разработчикам реализующим нетривиальную функциональность каждый день.