UverseWiki — весьма необычный проект по своей постановке, и блог у неё тоже весьма необычный. Начать хотя бы с того, что он тоже собирается из исходников — то есть ваших постов. Тоже самое относится к комментариям: они формируют движок, а не движок формирует их. ¶
Как же устроен движок блога на UverseWiki?
Основная его идея — в дополняемости к вашим постам, то есть работа в качестве обёртки
вокруг вики-файлов, а не их генерация. На практике это выглядит так, что на сервере есть
папка с вашими постами (файлы .wiki) и где-то там же есть папка движка. Сами по себе
сообщения не связаны с блогом до тех пор, пока вы их не внесёте в хранилище.
¶
На самом деле добавление постов делается с помощью страницы блога, где движок сканирует папку с вашими постами и ищёт обновлённые и новые сообщения и спрашивает вас, что с ними сделать. Вы нажимаете кнопку «Обновить» и они заносятся в базу, откуда затем берутся при обращении к страницам сайта. ¶
Необычность подхода в том, что имея исходные файлы ваших постов вы всегда сможете собрать блог с нуля
— без потери малейшего кусочка информации. Ваши труды важнее трудов компьютера!
В этом коренное отличие от традиционных блог-движков (да и большинства веб-движков вообще)
— движок не берёт на себя функцию хранения ваших данных, он лишь отображает их в
более удобной и красивой форме.
¶
При этом подходе сразу меняется взгляд на работу движка и его легковестность доходит до
такой степени, что он может быть скомпилирован в статический HTML — ведь это просто
обёртка, в конце концов!
Однако если ваш случай — обычный, и статический HTML вам ни к чему, то даже в динамическом
режиме движок может поспортить на равных с любым распространённым сегодня движком дял блога.
Вы можете проверить это сами, побродив по блогу автора.
¶
Ещё одно проявление нетрадиционного подхода — в архитектуре движка блога. Это так называемая
«omniplugin system», основные принципы которой изложены здесь.
В двух словах её идея такова, что вся система состоит из мельчайших модулей и движется за
счёт вызова событий («event firing»). Так как каждый участок кода не только логически
(разные функции) отделён от основного каркаса движка (исчисляемого десятками строк), но и
структурно (разные файлы), то теоритически любой файл можно удалить и это ничего не порушит,
а только отключит функциональность конкретно этого файла (например, кэширующий модуль
или генерацию стандартных permalinks — стандартный модуль и плагин различаются только
тем, что первый включен в официальную сборку).
¶
На практике совсем уж любой файл удать нельзя (модуль настройки, модуль индексов и пр. нужны для работы системы), но сам подход даёт гибкость творить с движком очень многое без обеспечения этого поддержкой в самом движке — это происходит за счёт привязки новых обработчиков событий к «точкам сочленения» — вызовам этих событий. И пока они есть внутри даже системных модулей можно менять ход вещей. ¶
Один из характерных примеров — плагин локализации, который весьма мал в объёме, но добавляет поддержку даже таких вещей, как переводённых сообщений блога — при том, что сам движок сугубо моноязычный (не считая, конечно, необходимых функций вроде перевода строк вместо их «вшивания» в код (hardcode)). ¶