UverseWiki

Нетрадиционный подход

UverseWiki — весьма необычный проект по своей постановке, и блог у неё тоже весьма необычный. Начать хотя бы с того, что он тоже собирается из исходников — то есть ваших постов. Тоже самое относится к комментариям: они формируют движок, а не движок формирует их.

Как же устроен движок блога на UverseWiki?
Основная его идея — в дополняемости к вашим постам, то есть работа в качестве обёртки вокруг вики-файлов, а не их генерация. На практике это выглядит так, что на сервере есть папка с вашими постами (файлы .wiki) и где-то там же есть папка движка. Сами по себе сообщения не связаны с блогом до тех пор, пока вы их не внесёте в хранилище.

На самом деле добавление постов делается с помощью страницы блога, где движок сканирует папку с вашими постами и ищёт обновлённые и новые сообщения и спрашивает вас, что с ними сделать. Вы нажимаете кнопку «Обновить» и они заносятся в базу, откуда затем берутся при обращении к страницам сайта.

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

При этом подходе сразу меняется взгляд на работу движка и его легковестность доходит до такой степени, что он может быть скомпилирован в статический HTML — ведь это просто обёртка, в конце концов!
Однако если ваш случай — обычный, и статический HTML вам ни к чему, то даже в динамическом режиме движок может поспортить на равных с любым распространённым сегодня движком дял блога. Вы можете проверить это сами, побродив по блогу автора.

Система плагинов

Ещё одно проявление нетрадиционного подхода — в архитектуре движка блога. Это так называемая «omniplugin system», основные принципы которой изложены здесь.
В двух словах её идея такова, что вся система состоит из мельчайших модулей и движется за счёт вызова событий («event firing»). Так как каждый участок кода не только логически (разные функции) отделён от основного каркаса движка (исчисляемого десятками строк), но и структурно (разные файлы), то теоритически любой файл можно удалить и это ничего не порушит, а только отключит функциональность конкретно этого файла (например, кэширующий модуль или генерацию стандартных permalinks — стандартный модуль и плагин различаются только тем, что первый включен в официальную сборку).

На практике совсем уж любой файл удать нельзя (модуль настройки, модуль индексов и пр. нужны для работы системы), но сам подход даёт гибкость творить с движком очень многое без обеспечения этого поддержкой в самом движке — это происходит за счёт привязки новых обработчиков событий к «точкам сочленения» — вызовам этих событий. И пока они есть внутри даже системных модулей можно менять ход вещей.

Один из характерных примеров — плагин локализации, который весьма мал в объёме, но добавляет поддержку даже таких вещей, как переводённых сообщений блога — при том, что сам движок сугубо моноязычный (не считая, конечно, необходимых функций вроде перевода строк вместо их «вшивания» в код (hardcode)).

Список плагинов находится здесь.