MODx Content Management System
обзор modxcms
Начиная обзор, я сразу скажу, что детального сравнения MODx с конкурентами как в open source, так и в коммерческих секторах не будет: это попросту не имеет смысла. К чему лишняя демагогия, когда можно потратить то же самое место на более глубокий разбор описываемого продукта? Убежден, любое творение заслуживает внимания, а что получилось, бриллиант или мыльный пузырь, покажет время. Разумеется, без некоторых аналогий все же не обошлось, но и только.
Итак, перед нами проект, во-первых, очень амбициозный. Какими только словосочетаниями не бросаются разработчики: и PHP application framework, и content management framework, и SEO CMS, и уже упомянутый выше AJAX CMS. Мы, конечно же, словам верим неохотно или не верим совсем и желаем все проверить собственноручно. Последняя доступная для скачивания версия — это 0.9.2; сразу отмечу ее высокую стабильность. Поэтому MODx можно смело использовать для проектов, а не только для домашних экспериментов.
Во-вторых, справедливости ради отмечу, что многое из сказанного разработчиками подтверждено реализованным функционалом продукта. При первом знакомстве MODx производит впечатление крепкого, но достаточно тривиального проекта; самое интересное происходит потом, когда начинаешь разбираться с системой более детально. С другой стороны, MODx относительно молод, что неизбежно сказывается на некоторых аспектах его работы. Так, например, механизм установки дополнений и расширений пока оставляет желать лучшего.
И, наконец, в-третьих, не последнюю роль в деле MODx играет дружелюбность к пользователям. Не все современные CMS могут похвастаться таким вниманием к удобству использования. Это проявляется во всем: начиная с автоматической установки, требующей от администратора лишь заполнения небольшой формы, и заканчивая продуманным интерфейсом менеджера системы.
Управление контентом
Наполнение сайта — это самое важное, что бы ни говорили любители технологий и способов реализации. Поэтому любая система управления контентом оценивается в первую очередь по возможностям именно в этой области. Люди, занимающиеся содержанием, по своей натуре обычно не способны ответить на вопрос: "А почему текст съезжает?" — и четкие инструкции не всегда способны решить эту проблему. Тут на помощь приходит так называемое разграничение полномочий и уже набившее всем оскомину правило отделения контентного уровня от презентационного.
В случае MODx это реализовано весьма и весьма на уровне. Менеджер имеет панель управления, дерево документов и окно для непосредственного внесения изменений. Казалось бы, что набор стандартный, но тут в дело вступает AJAX: система не требует постоянной перезагрузки страницы для совершения операций, и пользователь имеет полноценный single page interface. Преимущества такого подхода очевидны: скорость работы повышается, наглядность веб-приложения увеличивается, а коэффициент полезного действия, следовательно, растет.
Однако на этом чудеса не кончаются: зайдя на сайт, созданный на базе MODx, авторизованный участник увидит помимо самого сайта небольшое окошко, которое откликается на drag&drop и содержит ссылки на такие операции, как редактирование содержимого документа, вход в систему управления, изменение настроек и многие другие. Предполагаю, что такая вещь может кому-то показаться избыточной или вообще лишней, но на практике она действительно упрощает жизнь.
Кроме того, MODx имеет встроенный модуль управления файлами на сервере, который включает в себя возможность создания директорий и загрузки необходимых файлов куда угодно, а не только в специально отведенную директорию. Что касается самого изменения контента, то MODx предлагает использовать для этих целей один из WYSIWYG-редакторов; FCKeditor уже установлен по умолчанию.
Управление дизайном
Как и у многих конкурентов, дизайн в MODx строится при помощи шаблонов, причем HTML-код хранится в базе данных, а сопутствующие элементы (таблицы стилей, изображения и т. д.) — на сервере. Предполагается, что основная работа с шаблонами будет вестись на локальном компьютере, ибо сам редактор является обычным текстовым окном и не предлагает пользователям каких-либо расширенных возможностей вроде подсветки синтаксиса или отладки ошибок.
Тем не менее этот недостаток с лихвой компенсируется действительно богатыми возможностями в плане построения структуры сайта. Каждому документу можно присвоить уникальный шаблон, то есть, другими словами, сайт легко разбивается на разделы, имеющие собственное визуальное представление.
Для разметки зон отображения контента MODx имеет собственную систему тегов. Их выбор очень большой, но если его окажется недостаточно, то имеет смысл воспользоваться шаблонными переменными (template variables), с помощью которых можно легко добавлять на страницы недостающее содержимое. Правда, для создания такой переменной потребуются более глубокие знания, чем умение верстать HTML-документы, но процесс достаточно интуитивен, чтобы каждый желающий мог с ним разобраться.
Кроме того, в MODx есть возможность создавать, а затем добавлять к дизайну блоки статичного контента (формы, выходные данные, адрес, телефоны и другое), которые называются chunks. Они хранятся отдельно от остального содержимого, редактируются также отдельно и вставляются в шаблоны при помощи специального тега.
А как же быть с динамичным контентом (меню, заголовки новостей и т. д.)? Для этих целей в MODx предусмотрена возможность установки и дальнейшего использования кусков программного кода (snippets), которые могут решать какие угодно задачи: получение информации из базы данных, работа с сессиями или, к примеру, авторизация пользователей. Для использования такого модуля в шаблоне достаточно опять же набрать специальный тег, причем он будет содержать не только название, но и необходимые для работы переменные.
Разумеется, создание и управления переменными, chunks и snippets — это не работа дизайнера и тем более не работа редактора. Здесь не обойтись без поддержки со стороны веб-программиста. Благо, что и для него возможностей MODx должно хватить даже в самых экзотичных случаях.
Дополняя и расширяя
Очень важным элементом MODx, как уже говорилось выше, являются шаблонные переменные: поле их применения практически безгранично. Их создание — процесс не очень сложный, но неподготовленного пользователя может несколько обескуражить ввиду его комплексности. Список полей, которые необходимо заполнить, велик, но вся информация важна. Более того, MODx предлагает администратору выбрать тип переменной, от которой будет зависеть не только ее отображение, но и способ редактирования. То есть если выбрать тип Image, то при работе с переменной пользователь увидит интерфейс выбора изображения.
Для того чтобы сделать сайт еще более автоматизированным, разработчики MODx предусмотрели такую вещь, как указание источника данных. Другими словами, во время построения финальной страницы система для отображения шаблонной переменной может воспользоваться указанным запросом.
Всего таких запросов существует пять типов:
@FILE путь к файлу — если необходимо брать информацию из файла на сервере;
@DOCUMENT идентификатор — если необходимо брать информацию из документа в системе MODx;
@CHUNK имя — если необходимо брать информацию из определенного chunk;
@SELECT sql_query — если необходимо брать информацию из базы данных;
@EVAL код PHP — если необходимо на месте переменной исполнить определенную функцию.
В дополнение к этому MODx обладает набором специальных контроллеров (widgets), с помощью которых значения переменных отображаются на страницах. Они делятся на статичные контроллеры, которые лишь отображают информацию, не предоставляя дополнительного функционала, и динамичные, которые позволяют пользователю оперировать результатом: к примеру, выпадающие списки или панели drag&drop.
Однако главная прелесть MODx скрывается в возможности писать к нему модули расширения, используя MODx API и MODx Database API. Фактически модуль является отдельным веб-приложением, которое исполняется по запросу и может осуществлять практически любые операции. Сам код модуля может содержать как PHP-код, так и JavaScript-код, включенный в результирующую страницу модуля, причем хранится этот код либо в поле PHP, либо во внешнем файле. Таким образом, любой модуль имеет доступ к переменной $modx, которая несет все используемые данные.
Оба API пока не такие большие, чтобы говорить о чем-то выдающемся, но их возможностей вполне хватает для решения насущных задач. К примеру, Database API имеет всего шесть функций, но все очень полезные: Escape, Query, Select, Delete, Update, getInsertId. Также стоит отметить, что каждый модуль имеет группу ресурсов, которые будут с ним связаны. С помощью этой функции можно передавать данные из модулей, к примеру, в snippet. Иными словами, когда система будет запускать какой-то snippet, то ему автоматически будут доступны параметры указанного модуля.
Завершая статью, хотелось бы сказать о том, что MODx действительно заслуживает того внимания, которое ему в последнее время уделяется. Специалисты не зря все чаще упоминают этот продукт в своих аналитических материала и обзорах рынка. Конечно, еще рановато говорить о MODx как о новом ориентире в сегменте open source систем управления контентом, но кое-какие аспекты этого решения уже начали перенимать конкуренты. Думаю, не последнее значение тут имеет ориентированность MODx на веб-проекты второго поколения и основательный подход к реализации пользовательских функций, ведь технологии — это важно, но еще важнее — способ взаимодействия с ними.