Для поднятия GoodGirl.ru мы написали небольшой движок, в основе которого используеются XML-файлы для структуры данных и Berry.Tags - для шаблонов.
Принцип крайне прост. Движок обходит директории первого уровня и помещает их в меню, если директива skip не установлена. Директории ниже являются либо страницами, либо категориями, т.е. сами содержат другие работы. Например, страница /p/mnogoshop/ является категорией, а /p/mnogoshop/site/ - страницей.
Пример XML-файла
<title>Dewberry</title>
<image>image.jpg</image>
<date>2009-12-12</date>
<description>Движок для создания небольшого сайта вроде портфолио или визитки.</description>
<links
license="1"
svn="dewberry"
forum="http://forum.goodgirl.ru"
/>
Ничего, кроме title не является обязательным. data служит для сортировки данных и указывается при выводе данных, а не в глубинах движка. links используется только в шаблоне отдельной работы, например:
<a href="license/" if="$b{tpl.links.license}">Лицензия</a>
<a href="http://svn.goodgirl.ru/${tpl.links.svn}/" if="$b{tpl.links.svn}">Subversion</a>
<a href="${tpl.links.forum}" if="$b{tpl.links.forum}">Форум</a>
Все немногочисленные настройки лежат в файле config.xml.
config.xml для GoodGirl.ru
<!-- Название сайта -->
<name>GoodGirl Inc.</name>
<!-- УРЛ -->
<link>http://goodgirl.ru</link>
<!-- Почта -->
<mail>mail@goodgirl.ru</mail>
<!-- Локаль, можно указать несколько через запятую -->
<local>ru_RU.UTF-8</local>
<!-- Шаблоны -->
<template>
<!-- Слой - основной шаблон -->
<layer>tpl/layer</layer>
<!-- Шаблон отдельной работы -->
<work>tpl/work</work>
<!-- Шаблон списка работ -->
<works>tpl/works</works>
</template>
<!-- Меню -->
<menu>
<!-- Разделитель -->
<separator><![CDATA[<span class="second-separator">→</span>]]></separator>
<!-- Сортировка -->
<order_by>sort asc</order_by>
<!-- При построении меню игнорирует директории, в которых указана данная директива -->
<skip>skip</skip>
</menu>
<!-- Папки с файлами -->
<folders>
<!-- Общая папка -->
<common>d</common>
<!-- Папка отдельного проекта -->
<download>d</download>
</folders>
<!-- Спец. теги -->
<tags>
<!-- Теги, которые всегда считаются как множественные -->
<items>thanks</items>
<!-- Наследуемые теги -->
<extends>is_docs</extends>
</tags>
<!-- Глобальные директивы, они попадут в шаблон вне переменной $config -->
<globals>
<test>global value</test>
</globals>
<!-- Маршрутизаторы ссылок -->
<router>
<!-- Поиск -->
<re>(straw|dew)?berry(/(.*?))?</re>
<!-- Подмена -->
<route>c/\1berry\2</route>
</router>
Лицензия (LGPL)
Copyright © 2010 Alexey Gagin <lexazloy@gmail.com>.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.