Xaraya (читается «Зарая») — не просто еще одна CMS. Она предоставляет вдумчивому администратору сайта, готовому потратить некоторое время на освоение архитектуры и понимание внутреннего устройства, фактически готовый фреймворк, позволяющий сделать все, что угодно.
Порог входа в Xaraya несколько выше, чем у других известных мне CMS, но, во-первых, ненамного, а во-вторых — поверьте, оно того стоит.
В данной статье я попытаюсь максимально упростить начало работы с Xaraya, а заодно — расскажу о том, как прикрутить к сайту всяких библиотекарш и шахматы. Все нижесказанное относится к ветке 1.* (последняя на данный момент версия — 1.2.3, качать имеет смысл сразу

Установить Xaraya очень просто — нужно скачать дистрибутив, содержимое папки
Xaraya — модульное MVC приложение. В базовую поставку входит все, нужное для развертывания обычного сайта. Единицей информации в Xaraya является «публикация». Публикация состоит из набора «полей» (например, «Заголовок», «Введение», «Текст», «Картинка»). У каждого типа публикаций — несколько шаблонов вывода (например: «в ленте», «на отдельной странице»). Посмотреть на предустановленные типы публикаций можно в (здесь и далее:
Набор шаблонов вывода — называется темой («theme») и располагается в папке
Создание собственной темы — процесс поначалу нетривиальный, но захватывающий.
Язык шаблонов — XML с дополнительными свистелками (о них — чуть позже). Xaraya будет искать шаблон сначала в соответствующем каталоге вашей темы, потом — если такового там не окажется — в папке
Главные шаблоны — шаблоны страниц — лежат в папке
Вот более-менее стандартный вид файла
Блоки могут группироваться (см.
На время написания и отладки шаблонов — рекомендую включить опцию «Show template filenames in HTML comments» на странице Admin ⇒ Themes ⇒ Modify Config (
Собственно, пора бы уже написать какой-нибудь шаблон. Рекомендую создать новую публикацию типа «news», чтобы шаблон проще было отлаживать. Вот код из темы моего блога:
Сначала я «подключаю» шаблон вывода заголовка — он у меня одинаковый для всех типов публикаций, а дублировать код я не люблю. Потом вывожу поля записи (если они не пусты). Затем вывожу блок комментариев (я пользуюсь DISQUS для этого, в вызываемом блоке — просто сниппет, который они мне выдали). Затем вызываю хуки преобразований (о хуках нужно писать отдельно, пока же ограничусь тем, что они есть; теги, например, выводятся здесь через соответствующий хук, поскольку модуль

Обратите внимание: комментарии выводятся через свой шаблон, теги — через свой, и они все могут быть разными.
Для введения, мне кажется, достаточно. Какая-то слегка сумбурная получилась заметка, но я честно пытался рассказать про основную архитектуру, дать, что ли, введение.
Если тема окажется интересной — могу продолжить (например, рассказать про создание темы с нуля до «рабочего варианта», либо провести через процедуру «создания модуля»). Свои модули — это то, что превращает Xaraya во фреймворк. Ну а уж своя тема — она настолько легко настраиваема в мельчайших подробностях, что, зачастую, «узнать» движок становится просто невозможно.
Если я упустил что-то важное для понимания механизма работы этой CMS — обязательно спрашивайте в комментариях. Апдейты к статьям пока еще разрешены.
Upd: я в легком шоке. Меня попросили рассказать, что я знаю о Xaraya — и теперь я не могу опубликовать ссылку из-за 22 свалившихся минусов в карму.
Ну и сидите без ссылки ;-)
Порог входа в Xaraya несколько выше, чем у других известных мне CMS, но, во-первых, ненамного, а во-вторых — поверьте, оно того стоит.
В данной статье я попытаюсь максимально упростить начало работы с Xaraya, а заодно — расскажу о том, как прикрутить к сайту всяких библиотекарш и шахматы. Все нижесказанное относится к ветке 1.* (последняя на данный момент версия — 1.2.3, качать имеет смысл сразу
full
, чтобы дополнительно не искать модули). Ветка 2.* как-то меня не впечатлила, очень многое переделано, обратной совместимости нет, многие модули еще не адаптированы — в общем, сыровато для стабильной работы. 
Установка
Установить Xaraya очень просто — нужно скачать дистрибутив, содержимое папки
html
распаковать, например, в корень сайта (или не в корень), подготовить пустую базу данных и браузером сходить по адресу XARAYA_HOME/install.php
. Инсталлятор проведет вас через весь процесс и скоро у вас будет рабочий сайт (не забудьте после этого стереть файлы install.php
и upgrade.php
.Ключевые моменты архитектуры
Xaraya — модульное MVC приложение. В базовую поставку входит все, нужное для развертывания обычного сайта. Единицей информации в Xaraya является «публикация». Публикация состоит из набора «полей» (например, «Заголовок», «Введение», «Текст», «Картинка»). У каждого типа публикаций — несколько шаблонов вывода (например: «в ленте», «на отдельной странице»). Посмотреть на предустановленные типы публикаций можно в (здесь и далее:
XARAYA_HOME
— это что-то наподобие mybestsite.ru
) XARAYA_HOME/index.php?module=articles&type=admin&func=pubtypes
.Набор шаблонов вывода — называется темой («theme») и располагается в папке
themes
. Управление осуществляется через XARAYA_HOME/index.php?module=themes&type=admin&func=list
. Можно заметить, что RSS и «версия для печати» тоже сделаны через темы, что упрощает редактирование вывода для разных «устройств».Темы Xaraya
Создание собственной темы — процесс поначалу нетривиальный, но захватывающий.
Язык шаблонов — XML с дополнительными свистелками (о них — чуть позже). Xaraya будет искать шаблон сначала в соответствующем каталоге вашей темы, потом — если такового там не окажется — в папке
xartemplates
соответствующего модуля. Поиск осуществляется по имени шаблона. Например, пытаясь отобразить запись в блоге (модуль articles
, тип публикации news
, вид отображения — display
), Xaraya сначала заглянет в папку /themes/YOUR_THEME/modules/articles
и поищет там файл user-display-news.xt
. Если не найдет — возьмет стандартный из поставки (/modules/articles/xartemplates/user-display-news.xd
). Таким образом обеспечивается каскадность — переписывать вам придется только те шаблоны, которые вас не устраивают в стандартном представлении.Главные шаблоны — шаблоны страниц — лежат в папке
/themes/YOUR_THEME/pages
. Основных — три: default.xt
— на все про все,frontpage.xt
— отображение главной страницы, иmodule.xt
— отображение содержимого конкретного модуля (используется реже).
Вот более-менее стандартный вид файла
default.xt
:<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE blocklayout PUBLIC "-//XAR//DTD BL 1.0 Strict//EN" "http://xaraya.com/bl1/DTD/bl1-strict.dtd">
<?xar type="page" ?>
<xar:blocklayout version="1.0" content="text/html" xmlns:xar="http://xaraya.com/2004/blocklayout" dtd="xhtml1-strict">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<xar:set name="topnavblocksgroup"><xar:blockgroup name="topnav" id="topnav" /></xar:set>
<xar:set name="rightblocksgroup"><xar:blockgroup name="right" id="right" /></xar:set>
<xar:set name="leftblocksgroup"><xar:blockgroup name="left" id="left" /></xar:set>
<xar:set name="centerblocksgroup"><xar:blockgroup name="center" id="center" /></xar:set>
<xar:set name="themedir">#xarTplGetThemeDir()#</xar:set>
<xar:set name="sitename"><xar:var scope="module" module="themes" name="SiteName" /></xar:set>
<xar:template file="headtagcontent" type="theme" />
</head>
<body>
<div id="xc-outer-wrapper">
<xar:if condition="!empty($topnavblocksgroup)">
<xar:var name="topnavblocksgroup" />
</xar:if>
<xar:template file="pageheader" type="theme" />
<xar:template file="pageblockgroups" type="theme" />
<xar:template file="pagefooter" type="theme" />
</div>
<xar:base-render-javascript position="body" />
</body>
</html>
</xar:blocklayout>
Блоки могут группироваться (см.
xar:blockgroup name="*" id="*"
). К переменным и функциям контроллера можно обращаться через конструкцию #PHP_CODE#
. Переменные передаются из контроллера, который лежит в /modules/MODULE_NAME/xaruser
. Модель располагается в /modules/MODULE_NAME/xaruserapi
. В Xaraya почти все организовано через naming conventions; например, контроллер вывода отдельной публикации живет в /modules/articles/xaruser/display.php
, в функции articles_user_display($args)
и передает в шаблон данные вот так ($data
и $template
, разумеется, подготовлены собственно в коде функции):return xarTplModule('articles', 'user', 'display', $data, $template);
На время написания и отладки шаблонов — рекомендую включить опцию «Show template filenames in HTML comments» на странице Admin ⇒ Themes ⇒ Modify Config (
XARAYA_HOME/index.php?module=themes&type=admin&func=modifyconfig
). Кстати, ЧПУ могут быть отдельно включены для каждого модуля в настройках, а русская локализация — скачана и распакована в папку /var/locales/
.Практика
Собственно, пора бы уже написать какой-нибудь шаблон. Рекомендую создать новую публикацию типа «news», чтобы шаблон проще было отлаживать. Вот код из темы моего блога:
<xar:template file="user-display-title" type="module"/>
<xar:if condition="!empty($data['summary'])">
<div class="summary">#$data['summary']#</div>
</xar:if>
<xar:if condition="!empty($data['body'])">
<div class="body">#$data['body']#</div>
</xar:if>
<xar:if condition="!empty($data['notes'])">
<div class="notes"><p><em>#$data['notes']#</em></p></div>
</xar:if>
<xar:block module="base" type="html" instance="disqus" />
<xar:if condition="!empty($data['hooks'])">
<xar:foreach in="$data['hooks']" key="$hookmodule">
<xar:if condition="!empty($data['hooks'][$hookmodule])">
<xar:template
file="schild" type="module"
subdata="array(
'contentfile'=>'prevart-hooks',
'hookmodule'=>$hookmodule,
'data'=>$data
)"
/>
</xar:if>
</xar:foreach>
</xar:if>
Сначала я «подключаю» шаблон вывода заголовка — он у меня одинаковый для всех типов публикаций, а дублировать код я не люблю. Потом вывожу поля записи (если они не пусты). Затем вывожу блок комментариев (я пользуюсь DISQUS для этого, в вызываемом блоке — просто сниппет, который они мне выдали). Затем вызываю хуки преобразований (о хуках нужно писать отдельно, пока же ограничусь тем, что они есть; теги, например, выводятся здесь через соответствующий хук, поскольку модуль
articles
ничего не знает о тегах). Вот как это выглядит в результате:
Обратите внимание: комментарии выводятся через свой шаблон, теги — через свой, и они все могут быть разными.
The Summing Up
Для введения, мне кажется, достаточно. Какая-то слегка сумбурная получилась заметка, но я честно пытался рассказать про основную архитектуру, дать, что ли, введение.
Если тема окажется интересной — могу продолжить (например, рассказать про создание темы с нуля до «рабочего варианта», либо провести через процедуру «создания модуля»). Свои модули — это то, что превращает Xaraya во фреймворк. Ну а уж своя тема — она настолько легко настраиваема в мельчайших подробностях, что, зачастую, «узнать» движок становится просто невозможно.
Если я упустил что-то важное для понимания механизма работы этой CMS — обязательно спрашивайте в комментариях. Апдейты к статьям пока еще разрешены.
Upd: я в легком шоке. Меня попросили рассказать, что я знаю о Xaraya — и теперь я не могу опубликовать ссылку из-за 22 свалившихся минусов в карму.
Ну и сидите без ссылки ;-)