|
| ||||||||||||||
UMI.CMS: сайт как набор XML-сервисов15.09.2010 14:22
Источник:
Журнал Веб-Аналитик.ИНФО
Автор: Данил Костров
В последнее время я периодически читаю курсы, посвященные технологии XSLT и ее использованию в качестве языка шаблонизатора UMI.CMS. И я всегда начинаю знакомство с XSLT с того, что формулирую основную идею, вынесенную в заглавие этой статьи: мы работаем с сайтом на UMI.CMS как с набором XML-сервисов. В этой идее содержится вся суть подхода к разработке сайта на UMI.CMS при помощи XSLT-шаблонизатора. Шаблонизатор в этом случае является инструментом для агрегации и для вывода в необходимом нам виде данных, поступающих в формате XML, а XSLT — язык, при помощи которого мы управляем оформлением вывода. В этой статье я хотел бы рассказать об особенностях этого подхода для разработчика сайтов, в том виде, в котором это реализовано в UMI.CMS. Следующие возможности UMI.CMS лежат в основе реализации этого подхода:
При таком подходе разработчик использует унифицированный механизм получения любых данных в виде XML, как из системы, так и извне. Своего рода универсальный конструктор, в котором каждую деталь, необходимую для создания страниц сайта, мы либо просим взять из «коробки, которая рядом» (система), либо просим принести со «склада» (WWW). Рассмотрим отдельно каждую «деталь» этого конструктора.
Объекты системы в формате XMLОсновной особенностью UMI.CMS является то, что все данные хранятся в виде объектов. Все привычные понятия в системах управления контента, такие как: страницы, пользователи, баннеры, заказы, скидки, адреса доставки товаров, сами товары — все это объекты в UMI.CMS. При этом структура объектов определяется универсальным образом при помощи понятия «типы данных». Типы данных — это шаблоны для создания объектов, которые определяют количество и тип «полей», в которых объекты, созданные по этим шаблонам, могут хранить информацию. Эта архитектурная особенность обеспечивает единообразие представления всех сущностей системы, которое при использовании формата XML становится еще и чрезвычайно наглядным. Структуру данных и сами данные для любого объекта системы разработчик может посмотреть непосредственно в окне браузера, сделав запрос по протоколу UObject. Больше не нужно заглядывать в базу данных напрямую. Для страниц сайта, которые являются особыми объектами с привязкой к структуре сайта, реализована дополнительная надстройка, однако, они также являются объектами, хранящими данные. Структуру данных и сами данные для любой страницы разработчик также может посмотреть непосредственно в окне браузера, сделав запрос по протоколу UPage.
Результаты работы макросов в формате XMLБизнес-логика UMI.CMS реализуется при помощи API и макросов, которые, по сути своей, являются методами модулей UMI.CMS. Макросов в UMI.CMS достаточно много. Кроме того, любой разработчик всегда может дописать свой собственный макрос или даже целый модуль. Типичными ситуациями использования макросов являются: построение меню сайта, ленты новостей, списка объектов каталога, формы обратной связи и многое другое. Точно так же, как с объектами и страницами системы, структуру данных и сами данные, которые возвращают макросы системы, разработчик может посмотреть непосредственно в окне браузера, сделав запрос по протоколу UData.
Выборки из базы данных в формате XMLИногда перед разработчиком может стоять задача по получение некоторого списка объектов (или страниц) по какому-то заданному критерию. Это может быть какое-либо свойство, заданное пользователем или администратором сайта специально (например, «показывать на главной»), или это может быть любое другое свойство (например, дата публикации). Некоторые подобные возможности уже могут быть реализованы в виде макросов, однако бывают ситуации, когда стандартного функционала не хватает. В этой ситуации можно либо создать собственный макрос, либо воспользоваться еще одним протоколом, позволяющим получить выборку из базы данных — протоколом USel. Особенностью использования этого протокола является то, что для формирования выборки используются специальные шаблоны в формате XML, описывающие результаты, которые мы хотим получить. Эти шаблоны запросов также могут принимать параметры, что позволяет использовать их достаточно гибко. Точно так же, структуру данных и сами данные, которые возвращают запросы к базе данных системы, разработчик может посмотреть непосредственно в окне браузера, сделав запрос по протколу USel.
Подключение внешних XML-данныхПодход к сайту как к набору XML-сервисов гарантирует то, что мы можем получить любые данные из системы в виде XML. Как уже говорилось выше, при помощи шаблонизатора мы можем собрать эти данные нужным образом, оформить их как это необходимо и вывести на страницу сайта. Однако с точки зрения шаблонизатора неважно, откуда поступают эти данные: запрос происходит по протоколам, то есть, по сути, данные и так приходят извне. Поэтому логично предположить, что можно точно так же подключить данные из каких-либо внешних XML-источников, таких как сторонние RSS-ленты, курсы валют, поисковые результаты, другие сайты на UMI.CMS и так далее. Эти и другие результаты из внешних источников можно получить по протоколу UHttp.
Генерация XML-данных для доступа извнеИногда может возникнуть необходимость сгенерировать и отдать данные в формате XML наружу. Например, это может быть необходимо при подключении плагинов с использованием Ajax или Adobe Flash, для создания нестандартной RSS-ленты, генерации Google sitemap либо еще для каких-нибудь целей. Для этих задач существует возможность назначить альтернативную адресацию — некоторые страницы сайта (или набор страниц, объединенный по какому-либо критерию), будут отдавать XML-данные, сформированные на основании шаблонов, созданных разработчиком. В эти шаблоны он может включить любые данные из всех вышеописанных протоколов, преобразовать их так, как это ему необходимо и отдать наружу именно в том виде, в каком требуется.
Как все это работает?Дело в том, что в тот момент, когда запрашивается страница из браузера, система также генерирует XML-документ. Этот XML-документ содержит все данные об открываемой странице (поля и хранящуюся в них информацию), а также дополнительные сведения о положении в иерархии сайта, пользователе, открывшем эту страницу и некоторые другие сведения. Для того, чтобы отдать HTML-код в браузер и показать страницу пользователю, к этому XML-документу применяется XSL-шаблон, который и определяет то, как должен выглядеть HTML-код, построенный с учетом данных из исходного XML-документа. Этот XML-документ также можно посмотреть непосредственно в браузере, добавив к адресу страницы ".xml". То есть разработчик всегда может узнать точно, к чему именно применяется шаблон. Однако информация, хранящаяся в запрошенной странице, относится только к этой странице: например, ее контент, заголовок или описание. Эта страница «ничего не знает» о том, должно ли в итоге выводиться на ней меню, лента новостей, блок с товарами или что-то иное. Для того, чтобы вывести эти данные, мы должны получить их у системы, запросив дополнительные XML-документы — такие как, например, результаты работы макросов, выборки из базы данных, свойства других страниц и все что можно получить по протоколам системы.
Чтобы подключать эти XML-данные для вывода их в HTML-код, используются все те же XSL-шаблоны для страниц сайта. В шаблонах используется всего одна функция XSLT — функция document(), которой разработчик указывает XML-ресурсы, расположенные по адресу имя_протокола://набор_параметров.
Таким образом, на любой странице сайта можно выводить не только ее контент или иные ее свойства, а любые данные, которые могут быть получены по протоколам. Разработчик в шаблонах сам определяет, что именно будет на определенных страницах сайта, в соответствии со своими задачами. Что это нам дает? Чтобы правильно написать XSLT-шаблоны, разработчик может вызывать в окне браузера исходные данные, не обращаясь в документацию, работая непосредственно с той информацией, которую он хочет обрабатывать в шаблонах. Например, чтобы посмотреть результат, который вернет макрос, выводящий меню, достаточно набрать в адресной строке: http://адрес_сайта/udata/content/menu И разработчик увидит xml-представление для меню сайта в виде списка страниц с идентификаторами, названием и реальным порядком, определяемым структурой сайта:
Таким образом, написание шаблонов не представляет сложности и практически исключает необходимость отладки. Грамотное использование этого подхода позволяет очень быстро накопить набор готовых решений (для оформления отдельных блоков на страницах сайта или даже для целых страниц целиком), которые в дальнейшем можно использовать из проекта в проект, лишь меняя стили CSS и основные шаблоны внешнего вида страниц.
Недостатки подходаОдним из недостатков этого подхода можно назвать необходимость совершать дополнительные запросы, что может отнимать ресурсы и увеличивать время, необходимое для генерации страниц. Это может быть особенно актуально, если обращаться к внешним данным, а не к данным из системы. Именно для таких случаев в UMI.CMS добавлена возможность использовать кеширование для запросов по протоколам. В этой ситуации система не будет совершать реальных вызовов, а будет брать данные из кеша практически мгновенно, значительно экономя использование ресурсов. Вторым недостатком можно назвать реальный «соблазн» попытаться воплотить бизнес-логику непосредственно в шаблонах. В этой ситуации, скорее всего, результатом будет потеря производительности, масштабируемости и возможности повторного использования шаблонов в других проектах. К счастью, язык XSLT не вполне подходит для подобного использования и закономерные трудности, возникающие на этом пути, обычно помогают понять, что происходит что-то не то.
ЗаключениеРеализация подхода к сайту как набору XML-сервисов в UMI.CMS использует универсальный способ представления, получения данных и вывода их на итоговую страницу сайта. Кроме того, разработчику предоставлена возможность в любой момент получить наглядное представление тех данных, с которыми он работает. Расширяя стандартный функционал системы при помощи пользовательских макросов и используя шаблонизатор для агрегации и вывода информации, разработчик получает в свое распоряжение практически ничем не ограниченную свободу в управлении как логикой системы, так и выводом данных.
Добавить комментарийЧтобы написать Ваш комментарий необходимо зарегистрироваться или авторизоваться на сайте Комментарии FacebookКомментарии ВКонтакте |
16.05.2012
31 мая 2012, Новосибирск. Бесплатный семинар «Ловим сетью: маркетинг и продажи в интернете» 15.05.2012 24 и 30 мая 2012, Оналайн. Вебинар «Как сделать интернет-магазин удобным и прибыльным» 15.05.2012 20 мая 2012, Онлайн. Бесплатный вебинар «Интернет-магазин с нуля. Формула быстрого старта от UMI.CMS и Imsider.ru» ![]()
25.04.12 | UMI.CMS
Релиз 2.8.5.1 Уважаемые коллеги, партнёры и клиенты! Рад представить вам релиз 2.8.5.1, который включает в себя более 150 решённых задач и исправленных ошибок. В первую очередь - о главном: этот релиз занял ...
16.04.12 | NetCat
Робокот Представляем мультипликационный фильм "Робокот" от ребят из города Красноуфимска.
07.03.12 | Habrahabr
CMS / Что нас ждет в Joomla Framework 12.1 Возможно еще не все осознали, но Joomla давно разделилась на две части — Joomla CMS и Joomla Framework. Последний имеет версию <a href="https://github.com/joomla/joomla-platform/commit/4329ba0c4c0df438afa70a8e222dcf278fdb78ec">11.4</a>, но усиленно ...
25.01.12 | CMS Magazine
Владельцы сайтов смогут участвовать в конкурсе "Рейтинг Рунета – 2011" Конкурс "Рейтинг Рунета" становится открытым для всех сайтов. В этом году заявку на участие в конкурсе могут подать не только профессиональные веб-разработчики, но и владельцы сайтов.
|
|||||||||||||
|
||||||||||||||
|
Мир каминов предлагает - отделка каминов, купить камин по доступным ценам. Звоните! > Мы снизили цены на диваны - диваны и кресла.
Креативный Interactive Solutions выдаст новую идею. > кадровые агентства, доставка.
|
||