CMS. Админ-панель

Просмотров: 662Комментарии: 16
MaxSite CMSОбщие вопросы

Потихонечку продвигаюсь со своей CMS и уже занимаюсь админкой. Можно было бы наскоком прописать нужные функции и темплейт, но решил не спешить, и сделать так, чтобы админка была не вещью в себе, а выполняла лишь роль менеджера.

Подход, который я решил применить заключается в том, чтобы отказаться от тяжеловесных админских функций и перенести «физическую нагрузку» на плагины (или что-то аналогичное).

Получилась такая схема.

1. Вход в админку происходит по адресу http://site/admin/действие/параметры

2. «Действие» - это плагин или какая-то функция, которой передается управление. «Параметры» - с этим уже сама функция будет разбираться.

3. Сама же админка представляет собой html-темплейт, где прописаны четыре функции: mso_admin_header(), mso_admin_menu(), mso_admin_content(), mso_admin_footer(). Из названий понятно для чего они предназначены.

4. Теперь для того, чтобы вывести скажем настройки какого-либо плагина, мы просто вешаем (в плагине) хук на admin_content, а пункт меню добавлем как хук на admin_menu.

5. Таким образом подключить любой плагин к админке очень просто. Это буквально пара функций.

Конечно предстоит еще решить вопрос о дефолтных настройках/страницах, но в целом они ничем не будут отличаться от подключения тех же плагинов.

Следующая проблема с которой мне пришлось столкнуться - это админские функции по управлению базой. «Классический» подход заключается в том, чтобы наделать функций по управлению, создать html-формы и все это автоматом вызывать при входе в админ-панель.

Проблема здесь в том, что этих функций будет много и они будут между собой взаимосвязаны. Если нужно будет что-то изменить, то эта цепочка может протянуться очень далеко. В том же WordPress'е админка - это что-то невообразимое: огромное количество функций, которые не только переплетены между собой, но еще и тянутся к функциям в wp-include. Понятно, что изменить админку в WordPress очень и очень сложно. Всё, на что можно «позариться», так это смена css-стилей.

Лично мне такой подход не нравится, поскольку он очень сильно сужает рамки функциональности. Предположим нам нужно сделать страницу списка записей. В «классическом» варианте нам нужно было бы сделать отдельный php-файл, жестко его «прикрепить» к админке, написать все функции, выполнить SQL-запрос и выполнить форматирование полученных данных. Если пойти по такому пути, то неизбежно прийдем к «тяжелой» админке.

Теперь, предположим, появляется другой плагин, который выполняет примерно тоже самое, но выводит данные по-другому. В третьем случае мы хотим получить выборку данных для еще каких-то действий. Во всех этих случаях мы выполняем по сути одно и тоже действие - получение данных, а вот отображение может быть различным. Получается, что есть смысл унифицировать основные действия в системе, чтобы вызывать их одной функцией.

Таким механизмом является XML-RPC. В кратце я расскажу что это такое.

В XML-RPC есть две стороны: сервер и клиент. Сервер - это некий php-скрипт, который принимает входящие данные (запрос) и, согласно этому запросу, выполняет определенное действие (метод, функцию). Клиент в свою очередь - это обычный POST, только данные в нем передаются в виде XML-структуры. Например нам нужно получить список последних записей. В запросе мы указываем свой логин, пароль, название метода и количество записей. Отправляем этот запрос и в ответ получаем список последних записей.

Именно так работают оффлайн-клиенты (блог-клиенты). Как видите клиенту совершенно не обязательно знать все тонкости внутренней реализации методов. Все, что ему требуется, так это название метода и его параметры.

Теперь, перенеся эту технологию на нашу админку, мы получаем, что функция для админки должна просто-напросто сформировать XML-запрос к своему же серверу и получить необходимые данные.

Что же получается в итоге.

1. Админка не несет «тяжелых» функций.

2. Простое подключение любых плагинов к админке.

3. Перенос функций для визуального отображения данных в отдельные плагины.

4. Получение данных выполняется через универсальный XML-RPC.

5. В «комплекте» мы сразу же получили работу с блог-клиентами.

На долю самой админки выпадают помимо функции менеджера, еще и работа с разграничением доступа (роли, группы, права), базовые настройки плагинов (включение, отключение, деинсталяция), базовые настройки сайта (выбор шаблона, название, описание и т.п.), то есть только то, что входит в самый минимум: таблицы options и users.

Комментариев: 16 RSS

1funky12-02-2008 20:19

а на чем пишете? простите за любопытство...

имхо, к вашему подходу хорошо подойдет такая вешь как CodeIgniter.

(это фреймворк такой на php)

2Alcashonok12-02-2008 20:56

Кстати, да. То, что ты описываешь - это же и есть фреймворк. Или даже Application Server :) Абстрагирование от физической структуры базы.

3Dimox12-02-2008 22:05

Господа, видимо, вы не читали предыдущих записей :). Максим как раз использует CodeIgniter.

4Lirck12-02-2008 22:50

Круто! Я тоже делаю CMS, но на своем ядре...:smile:

5Артём Курапов12-02-2008 23:20

А меня интересует интерфейс. Фреймы используете? Ajax? Как справляетесь с модульностью и необходимостью что-нибудь интегрировать? :???:

6макс12-02-2008 23:47

а будет возможность систему потестить? Столько о ней пишите, что интересно стало посмотреть.

7Михайлов13-02-2008 00:31

Довольно интересно, что админка умеет?

8Lirck13-02-2008 00:31

Почему бы тебе не выложить движок:smile:

9абориген Красноярска13-02-2008 01:57

КМСку в студию!:mad:

10Максим13-02-2008 12:37

Версию, которая будут выложена, предназначена не для использования, а для разработчиков. Я вряд ли один справлюсь со всем (или это будет очень долго), поэтому сейчас занимаюсь прежде всего каркасом системы, как раз для того, чтобы сторонний разработчик мог без проблем подключить свой функционал. То же самое касается и админки. В ближайших планах доделать страницы плагинов, опций и авторизации и уже в таком виде выложу в открытый доступ.

11Михаил Наумов13-02-2008 14:18

Присоединяюсь к Артёму Курапову насчет интерфейса. Я пересмотрел кучу CMS-ок и пришел к выводу, что 90% из них не user-friendly. Если админка красивая и понятная, то это очень хорошо скажется на ее дальнейшем распространении. Реальный пример -- Wordpress.

12mirko13-02-2008 14:34

Это все конечно интересно, но лично меня больше всего интересует насколько простой будет интеграция в готовые шаблоны, для человека далекого от php.

13Антонов Сергей13-02-2008 20:56

собственно да, хотелось бы посмотреть на итог работы

14Глобатор19-02-2008 11:39

Максим, желаю успехов в твоем проекте! Уверен, получится отличная CMS.

15Охотник на зелёных25-02-2008 13:49

Тёзка, я тоже жду, ну когда же... слюни то текут... уже до коленей. Я не сказал бы, что разработчик, но что знаю, тем помогу. Просто уже потестить хочеться.

16Влад23-06-2008 22:46

Предлахаю принимать ставки на то скока боков будет выявлено после первого запуска. Выигравшему: бан))

Оставьте свой комментарий!

Комментарий будет опубликован после проверки

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)

О проекте

MaxSite CMS предназначена для создания сайтов любой сложности. Система отлично подходит обычным пользователям, вебмастерам, фрилансерам и вебстудиям.