Руководящие принципы
Если у сайта один автор, то обычные CMS избыточны, а программы для написания сайтов не гибки.
Вот основные принципы однопользовательской CMS.
- Если автор один, незачем генерировать страницы динамически. Можно по команде автора сгенерировать статические страницы. Пусть это займёт большое время, но пользователи, скачивая статичные html-ки получат прекрасное быстродействие. Принцип вообще можно сформулировать так: незачем генерировать каждый раз то, что можно сгенерировать один раз и выдавать пользователю в готовом виде.
- Вследствие однопользовательской сути невозможен конфликт при работе скриптов, перерабатывающих статичные страницы.
- Скрипты лучше чем скомпилированная программа своей гибкостью, модернизируемостью. Виндоюзер должен иметь денвер для юзания скриптов. На основе этих принципов можно сформулировать некоторые принципы построения такой системы.
- Для такой CMS можно использовать php фрэймворки. Неоптимальность функций по быстродействию не играет роли, так как задав некоторое изменение контента автор запускает регенерацию статичных страниц и переключается на другую задачу. А пользователи скачивают статичные html страницы.
- демоны - это скрипты, генерирующие страницы в соответствии с какими-то правилами и содержимым
- Содержимое делится на категории по времени актуальности: контент и матрицу. Матрица включает html-разметку и оформление, скрипты javascript, какие-то постоянные блоки, текстовые константы и структуру построения сайта
- Матрица задаёт типы единиц контента
- Ядро содержит логику взаимодействия демонов, матрицы, контента и пользователя
- Ядро и демоны обращаются к фрэймворку, библиотеке функций, фрэймворку и функциям php
- Библиотека функций - это модули с типовыми функциями, которые нужны для многих демонов, но отсутствуют во фрэймворке Для придания жесткости системе введём правила:
- Один демон - один php файл. Последовательность запуска демонов определяется ядром на основе конфигурационного файла, доступ к которому даётся пользователю через UI.
- Скрипты хранятся отдельно от сгенерированного контента, чтобы можно было контент легко загрузить на сервер. Фичи:
- Существует необходимость интегрировать в CMS наборы html-файлов с папками рисунков с огромным их количеством. CMS должна допускать добавление html файлов простым копированием с дальнейшей обработкой их демонами и интеграцией в общую систему. В частности уже существуют хорошие скрипты для генерации минималистичного красивого html-кода из безобразия создаваемого microsoft office. Обработчик кода MSO - один демон. Для каждой визивиговой софтины может быть написан свой демон.
- По желанию можно внедрить в генерируемые страницы и php-код, сдерав их нестатичными. Это разрушает систему, но кому-то может быть необходимо Дальнейшее развёртывание системы зависит от:
- того, какую гибкость мы хотим получить от системы - это определит набор демонов
- какие смысловые единицы содержит наш сайт - это определит матрицу Итак, основные понятия нашей системы: ядро, демон, матрица (шаблон, константы), контент, регенерация.
Кажется что получилось слишком сложно, но для развёртывания формализованной мировоззренческой системы, такой как, например, система автора
scorcher.ru, такая CMS подойдёт идеально. В отличии от scorcher.ru, допиливавшегося на коленке по мере развития, и от того довольно корявого, единоличная гибкая CMS даст красивое и шустро работающее решение.
По сути каждая современная CMS реализует какую-то свою матрицу. Scorcher.ru - пример не совсем обычного сайта с более сложной матрицей.
Матрица
Матрица мировоззренческого сайта должна содержать:
- Древовидную структуру статей
- Акцентируемая информация: положение в дереве, взаимосвязь с другими элементами - контекст
- Статьи
- Акцентируемая информация: цитаты, аксиомы, гипотезы, термины
- Систему классификации источников - копипасты
- Акцентируемая информация: какой источник, когда и кем написан, несколько отличающееся оформление
- Цитатник - аналогично концевым ссылкам в MS Word
- Акцентируемая информация: быстро показать откуда эта цитата - если из книги - из какой главы, кто автор, когда написано, если надо - контекст; если из фильма - контекст, какая минута - чтобы не заставлять читателя смотреть весь фильм. Возможно размещение более объёмных кусков копипасты, видео или флэш роликов, аудиоподкастов
- Термины и определения - список терминов и определений с группировкой по алфавиту или последовательности их упоминания с перекрёстными ссылками
- Демоны также расставляют всплывающие подсказки там, где встречают вхождения терминов в текстах статей. Возможно ручное указание как в вики Вместо комментов для таких сайтов лучше подходит форум. Форум подразумевает большую заинтересованность человека в обсуждении, а не так, чтобы насрать и убежать. Тексты статей могут сопровождаться ссылкой на обсуждение. для получения количества постов в обсуждении (или, например, даты последнего поста в ником участника) можно делать запрос javascript-ом или таки-внедрить php-код. Ну и другой вариант - готовые сторонние скрипты комментов на жабаскрипте с интеграцией с соцсетями. Это для насрал-убежал комментов :)
Демоны
Какие могут быть демоны
- демоны wysiwyg софта
- демоны wysiwyg скриптов, например демон для размещения контента набранного в [|FCKeditor] на сайте.
- демон импорта из tiddlywiki, например
- демон подсказок для терминов и определений
- демоны генерации sitemap, меню, списков статей по категориям
- демон вставки блоков меню, хедера и футера в соответствии с шаблоном
- демон исправления абсолютных ссылок на относительные
- демон проставления правильных кавычек для каждого языка - «русские», “english”, и прочих типографских красивостей
- демон приведения
к единому виду, например к принятому на сайте оформлению с javascript`овыми эффектами, объединение картинок в галерею - демон-архиватор версий - вызывается в самом начале регенерации и сохраняет архив текущего состояния
- демон смены шаблона при сохранении матрицы
- демон сжатия html javascript и css наподобие http://webduty.ru/css-optimiser/http://webduty.ru/html-optimiser/index.html и http://webduty.ru/js-packer/
- демон-резидент, запускающийся по cron и грабящий контент, либо наоборот, постящий контент куда-то
- демон-генератор rss
- демон-простановщик дат Могут быть мастера для вызова демонов. Например, мастер регулярных выражений для автозамены по какому-то шаблону по всему сайту. Расстановка каких демонов запускать и в какой последовательности должна быть в ядре.
Каждая матрица должна поставляться с набором демонов для перехода с базовой комплектации CMS на новую матрицу.
Опции демонов
Для генерации с опорой на внутренние файлы или на содержимое уже существующих статичных страниц.
Опция полной перегенерации (удаление всех файлов и перегенерация)
Приёмники информации
Специальная папка для необработанных html
Граббинг контента
Набор (копипаст) в wysiwyg редакторах
Специальная папка для необработанных файлов других форматов
Типовая последовательность действий
Кладём файлы с контентом в папку-приёмник, запускаем демоны с нужными опциями, заливаем полученный статичный сайт, радуемся.
А когда мне это делать?
Вот некогда мне такое писать. Если бы у меня был риталин, м.б. и писал бы по вечерам по полчасика эти скрипты :)
Демонов писать просто, достаточно подрихтовать существующие скрипты. Главное - ядро.
http://vkontakte.ru/note16510481_10765341