Как создать собственную CMS
Каждый день в Интернете появляются миллионы новых документов, вместе с тем активно растет число программ для управления сайтами и содержанием этих документов. Подобные программы обычно называют CMS - системами управления содержанием. Если вы владеете сайтом и до сих пор не используете CMS то, вероятно уже очень скоро, время заставит вас либо приобрести CMS, либо разработать собственную. Но что если вы пожелаете разрабатывать собственную CMS, как систему, наиболее точно отвечающую вашим требованиям, специфике и безопасности? Насколько эта задача выполнима, насколько рентабельна? Если вы возьмете за основу уже готовую Open Source программу и настроите ее исходный код , то в наиболее короткий срок вы получите рабочее решение, но едва ли оно будет отвечать всем вашим первоначальным требованиям. Да и по мере возникновения новых требований их воплощение в подобной CMS окажется затруднительным. Изменять чужой программный код, обычно сложнее, чем писать свой, причем это правило тем актуальней, чем больше объем этого кода.
Если вы начнете разработку собственной CMS могу сразу напророчить впечатляющие трудозатраты на создание развитой документной структуры, организацию менеджмента пользователей системы, поддержку бизнес-процессов (workflow), реализацию веб-сервисов. Однако вы можете относительно быстро и надежно собрать ядро CMS, скрипты, отвечающие за отображение документов на сайте, управление их содержанием и оформлением. Что ж, это главное, остальное, как говориться, приложиться.
Впрочем, давайте взглянем на задачи для этого самого ядра. На сайте, обслуживаемом CMS должны отображаться документы различных типов. Другими словами, разные страницы сайта могут быть различны не только по содержанию, но и по дизайну, но и по структуре. Было бы еще лучше, если бы CMS позволяла отображать также и страницы в форматах отличных от HTML. Например, со временем может понадобиться вывод ленты новостей в формате RSS, так что бы новости сайта были доступны для пользователей популярных ныне клиентских программ сборщиков новостей. Возможно, возникнет необходимость в WAP-версии сайта для мобильных телефонов. CMS должна позволить нам обойтись минимальными усилиями для подобных случаев. Следует сразу же учесть, что даже если мы ограничиваемся одной версией сайта для определенного языка содержания (скажем, русского), не мешало бы быть готовыми к тому, что скоро нам потребуется версия для еще одного или более языков. Ну и что совершенно очевидно, CMS не должна чинить нам каких-либо препятствий, какой бы графический дизайн для сайта мы бы не выбрали. Едва ли можно считать корректным подход, где дизайнеру объясняют программисты, что навигационное меню сайта может быль лишь вертикальным и слева от основного текста, а форма опроса посетителей лишь справа от него. Если, испугавшись трудоемкости поставленных задач вы уже покрылись холодным потом, то спешу успокоить вас, потому как далее следует решение. Итак, что бы мы лучше понимали друг друга необходимо определиться с некоторыми понятиями. Для нашей CMS имеется два состояния. В первом CMS отображает сайт посетителям, так сказать, доставляет им внешность сайта. Назовем это состояние представлением сайта. Во втором состоянии администратор сайта управляет содержанием страниц, структурой и прочее. Здесь уже речь о сайте изнутри. Это состояние администрирования сайта. Теперь о страницах сайта. Каждая страница сайта - это документ, имеющий свой персональный интернет-адрес. А сайт представляет собой совокупностью таких документов. А из чего состоит документ? Документ составляет информация, определенным образом структурированная и оформленная. Для того, что бы сайт был более прост в восприятии ссылки на документы располагают в многоуровневых навигационных меню по степени их логической взаимозависимости. Т.е. в соответствии с определенной структурой (документной структурой). Кроме того, в этой документной структуре предусматриваются и различные категории документов, идентичных по логической архитектуре и оформлению. Таким образом, в состоянии администрирования нашей CMS нам потребуется интерфейс с перечнем категорий документов и интерфейс представляющий документную структуру сайта. Первый интерфейс будет содержать шаблоны страниц, задающие логическую архитектуру и оформление документов. Интерфейс структуры, позволит добавлять, изменять и удалять документы, а также задавать логическую зависимость их друг от друга. Ну а то, каким образом будет задаваться документная структура CMS выбор за вами. Самое распространенное и наиболее простое решение - иерархическое дерево или решетка Бете, хорошо знакомое нам по картам сайтов. С него можно и начать, но, припоминая о наших задачах, следует сделать корневыми разделами дерева языковые версии сайта, даже если пока планируется лишь одна версия.
Но вернемся в интерфейс документной структуры. При переходе к свойствам какого-либо из документов структуры, мы должны дать возможность администратору править основные атрибуты документа: название, URI (интернет-адрес документа), указатель на шаблон документа. Внимательный читатель должен был бы сейчас возмутиться: . Как уже говорилось, шаблон документа задает как его оформление, так и архитектуру. Подразумевается, что в коде разметки оформления документа расставлены специальные указатели: здесь будет заголовок, здесь анонс, здесь основной текст, а здесь изображение. Как видите, документ - это еще не есть сами данные. Для того, что бы запросить должным образом данные у администратора, для внесения содержания документа, необходимо обратиться к шаблону. В результате мы получим интерфейс запроса содержания документа, например, в таком виде: поле запроса заголовка, поле запроса для анонса, WYSIWYG-редактор для запроса основного текста и поле для загрузки изображения.
Разумеется, что при подобной схеме в шаблоне документа оформление может быть представлено не только в HTML. Если вы в шаблоне будете использовать XML, то сможете обращаться к документам сайта из FLASH и соответственно управлять из CMS содержанием FLASH-сайта.
Конечно, одна эта небольшая статья не может ответить на все вопросы, которые возникнут при реализации CMS. Даже при сборке ядра вы наверняка задумаетесь о синтаксисе указателей в шаблоне, о реализации различных веб-сервисов, хотя бы, той же ленты новостей. Однако данная тема детально разобрана в спецификации XML Sapiens и доступна на сайте проекта www.XMLSapiens.org на английском и русском языках. А изучить приведенную технологию управления сайтом можно на примере бесплатной CMS SAPID (http://sapid.sf.net).