При изучении 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 " ">]>
<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 в Umbraco достаточно нудно, если не знать, что для загрузки файлов на сервер существует Desktop Media Uploader, для выбора файла в документе — тип данных от Digibiz, а для выбора группы файлов — uComponents: Multipicker.
Если идея виртуальной файловой системы вам не нравится, то можете использовать файлы и папки файловой системы сервера, типы данных для этого тоже есть.
Заключение
Umbraco CMS — создана подходить для широкого круга задач, потому был выбран путь документо-ориентированной системы. Фактически, Umbraco — это платформа, в которой документы и типы данных помогают отразить именно вашу предметную область, макросы и шаблоны реализуют функционал, нужный именно вам.
Umbraco имеет множество мест расширения, богатый API и открытый исходный код. Сообщество Umbraco имеет неплохой форум на котором есть описания довольно большого количества решений.
Думаю, что именно из-за своей универсальности и расширяемости Umbraco CMS нравится разработчикам реализующим нетривиальную функциональность каждый день.