CMS
Каждый человек должен построить дом, вырастить сына, посадить дерево. Веб-программист - должен создать свою CMS.
Я не говорю, на чем она будет создаваться (PHP, ASP,...), это не имеет никакого значения.
Я не говорю, стоит ли это делать вообще, ведь многое уже создано ранее да еще и распространяется бесплатно.
Я не касаюсь аутентификации, авторизации, регистрации и прочего - всего, что связано с правами и возможностями пользователя. Как это все будет реализовано - отдельная тема (например - с помощью тегов). Для простоты понимания - в дальнейшем будет обсуждаться ТОЛЬКО пользователь с возможностью изменения структуры сайта и заметок к нему. Для остальных такая возможность закрыта.
Поэтому, сразу к сути, проекту CMS (на PHP).
1. Сайт строится на основе некой структуры (ВНЕЗАПНО!), группе страниц, организованных в виде дерева .
Но, общее количество таких страниц не означает, что только они и будут. Структура - только основание.
2. Заметка - мельчайшая частица информации для построения сайта. Лист для дерева
Зайдя на сайт без заметок, можно будет перемещаться между страницами (вся навигация строится автоматически на основе структуры, но это НЕ ЕДИНСТВЕННЫЙ способ организации навигации, о чем будет рассказано чуть ниже), и - как бы и всё.
3. ЛЮБАЯ страница строится на основе шаблона.
Шаблон - обычная HTML-страница с размещением в необходимых местах специальных меток (поля редактирования).
Наличие метки означает, что в этом месте будет организован вывод единичных заметок ИЛИ группы заметок, отобранных по какому-либо критерию (например, последние десять новостей сайта).
Кроме того, существуют шаблоны для вывода отдельной заметки, просто группы заметок, или группы заметок, организованных по фильтру или иному принципу (ниже).
При выводе чего-либо (страницы структуры, заметки и прочего) выбирается соответствующий шаблон и формируется уже готовая страница.
4. ЛЮБАЯ заметка может иметь тег или несколько тегов, которые виртуально "группируют" заметки.
Одна и та же заметка может входить в разные группы, например "Россия" "Новости" "Спорт" "Олимпиада".
Когда, в какой момент времени будет формироваться страница для вывода таких групп? Ведь в структуре этого НЕТ?
ВОТ. И это самое интересное. Опять же, ниже.
Открыв страницу структуры в самом начале редактирования мы видим пустую страницу с возможностью добавления заметки (или группы заметок).
На одной странице может быть несколько полей редактирования - Заголовок, Подвал, Основное поле ввода, Левая часть, Правая часть, ЧТО-ТО ЕЩЕ.
Название страницы в заголовке уже есть, как и адрес страницы - все это задавалось во время создания/изменения структуры.
Кроме того, присутствуют общее меню для навигации между страницами структуры (вверху), меню дочерних страниц (чуть ниже) ну и меню группы страниц, например, слева или справа), к которой страница принадлежит.
Ну и однострочное меню - показывает расположение страницы в корне.
Все меню строятся автоматически (повторюсь) на основе структуры сайта.
Необходимо внести какой-то текст, к примеру "Hello, World!" в основном поле редактирования.
И тут оказывается, что внести просто текст НЕЛЬЗЯ.
Зато можно добавить заметку с любым заголовком (вывод заголовка настраивается - нужно это или нет, датой/временем - аналогично, и прочее) и собственно с текстом "Hello, World!" с нужным форматированием и рисунками к нему.
Сохраняем заметку - и она уже появляется на самой странице.
Почему так сложно? Можно же было все реализовать и без этих заметок?
Такой способ только кажется сложным. А в дальнейшем появляется куча преимуществ:
- Любую заметку можно использовать многократно. Заметка - часть общего фонда.
- Заметки можно добавлять на страницу в виде ленты заметок - отобранных по фильтру (по тегу/тегам/сложному правилу и/или по времени).
Добавленные заметки/ленты заметок могут выводиться с заданным порядком - новые сверху или наоборот (соответствующая настройка). - Если заметок в поле редактирования много - автоматически строится навигация к ТОЙ ЖЕ странице структуры проекта (но с другими параметрами в адресной строке) для отображения следующего списка заметок/группы заметок (настройка по максимальному количеству на странице).
- Заметка может выводиться полностью или частично (клик по "Далее" приведет к открытию полной версии заметки), причем открытие страницы в новом/том же окне - уже с навигацией по своей группе заметок (например по "Новостям") - опять же с настройкой.
- Заметка может иметь один/несколько тегов. Их отображение настраивается. Клик по тегу ведет к открытию заметки или всех заметок по выбранному тегу (настраивается тип открытия и максимальное количество на странице) с навигацией.
- Так как сами теги ТАКЖЕ МОЖНО группировать в виде деревьев - может отображаться одно из деревьев тегов (настраивается). Клик по любой ветке дерева тегов приведет к отбору/отображению (настройка) сразу по группе тегов - опять же со всей сопутствующей навигацией.
- Заметка, так же как и страница структуры, может иметь свой особый шаблон (настройка).
5. Более подробно
Поле редактирования - признак того, что здесь может быть что-то расположено.
Но, в случае изменения настроек отображения поля редактирования или добавления чего-либо - в поле редактирования появляется лента объектов.
Заметка, группа заметок (выбранных по критериям и отсортированные в определенном порядке), меню, система комментирования, отдельные фотографии или группы фотографий (галереи фотографий - фото, отобранные по определенному признаку), еще что-то - это все объекты.
Поле редактирования может НЕ ИМЕТЬ ленты объектов, если параметры отображения, выставленные "по умолчанию", устраивают пользователя.
К примеру, поле редактирования Header по умолчанию выводит в самом начале при помощи объекта MainMenu основное меню для навигации по основной структуре сайта.
Если не отменять вывод этого меню - ленты как таковой и не понадобится. В ином случае - т.е. необходимо отключить генерацию меню - появится лента, в которой и можно задать параметры отображения.
Еще пример - поле редактирования GroupColumn - по умолчанию в самом начале, при помощи объекта GroupMenu формирует меню для навигации в группе страниц (к которой принадлежит отображаемая страница) по основной структуре.
Если же понадобится перед меню добавить что-то свое - появится лента объектов с уже включенным в нее этим объектом. А уже в самой ленте - можно с объектами что угодно: перемещать, разрешать/запрещать вывод (в том числе по правилам) или эти объекты удалять. Само поле редактирования GroupColumn может располагаться в шаблоне страницы в зависимости от дизайна в левой или правой ее части.
Еще пример - поле редактирования Footer. Располагается обычно в самом низу страницы. По умолчанию, при помощи спецобъекта ImportantPages выводятся, ссылки на определенные важные страницы - Начальную, Контакты, Поиск. Кроме того - после ссылок - выводятся Счетчики объектом Counters.
Если же нужно задать свой определенный текст (внести заметку), поменять параметры вывода или порядок отображения (какой выводится в первую очередь) - появится лента объектов с объектами ImportantPages и Counters.
Еще, как замечание - все манипуляции с объектами ведутся НЕПОСРЕДСТВЕННО на самой странице. Поменял-сохранил-тут же на этой странице увидел изменения. Да-да, Drupal-оподобный способ редактирования :)
Минусы:
Похожее уже реализовано (причем МНОГОКРАТНО. Забавно, да? Че это они велосипеды создают, а?).
Шаблонная система - как-то не профессионально (честно, я видел и такой аргумент).
Своя реализация прав по редактированию - и проблемы с администрированием.
Автоматическое формирование меню (у меня с этим проблем особых, кстати, не возникло).
Плюсы:
Простота создания шаблонов - на основе предлагаемых в том числе бесплатно или создаваемых лично. Достаточно в нужных местах разместить метки с полями редактирования. Кроме того - это повышает общую безопасность (вероятность взлома меньше, так как в других местах, кроме как в шаблонах, размещение полей редактирования ни к чему не ведет).
Своя реализация прав по редактированию.
Полный контроль над СВОИМ проектом - я время от времени вижу появление сообщений об очередном взломе/критической ошибке различных CMS. И это при том, что многие проекты распространяются бесплатно и в открытом коде.
В любом случае - создание своего - отличная практика.
Чем не курсовая/дипломная работа :) ?
Ну или личный Drupal, Joomla! или Wordpress.
Вопрос-Ответ | |
Контакты | |
Визитки | |
Статьи | |
Генератор Интерфейса | |
Maple4 Report Generator | |
Новости | |
CMS | |
Недосказанное | |
Ресурсы | |
Карта |
Что-то интересное
Татуировки - история возникновения
Об истории создания АК-47
Бешенство
Сон - мифы и правда
Франсуа-Жан де ла Барр - герой поневоле
Что-то политическое
Шпионский детектив о ГРУ беспилотниках и российской пенсии
Зеленский на лыжах спустился с гор и всех спас
Из-за чего на самом деле стыдно Юрию Луценко
Бытовое нападение. Пил
Провокаторы Майдана мечтают о повторении?