почему я спрашиваю...
Dmitri 12.02.2003 17:36
Появилась у меня идея сделать некий конструктор, который грузишь на сервер, а дальше уже через веб-интерфейс "разворачиваеш" сайт. Ниже попытаюсь кратко его изложить.
Есть шаблоны. В шаблонах условными тэгами обозначены места для информационных блоков. Есть база разделов и страниц. Каждая страница должна принадлежать какому-то разделу и каждая страница отображаеться при помощи определенного шаблона. Разделы иерархичны (у каждого есть предок, могут быть потомки) родитель "0" - корень дерева.
При обработке шаблона, блок наполняется содержанием какого-то типа, например: text_from_db(банально текст из БД), news_list(список новостей), news_details(подробная информация о какой-то новости), forum_themes(список тем форума), forum_add_message(форма для добавления сообщения в форум) и т.д. В таблице content описано содержание всех блоков для всех страниц.
У блоков есть "настройки" для того, что бы определить, например какой текст из БД вытаскивать, если тип блока text_from_db. Система настроек иерархическая: есть настройки по умолчанию, переопределяемые настройками разделов, блоков, а потом страниц.
Таким образом, структуру и наполнение сайта можно легко редактировать через веб-интерфейс.
Почему получается жоп@ с ^process'ами?
Хотелось бы сделать, что бы все эти "типы" наполнения блоков были лекго подключаемы по необходимости.
Когда "движок" все это собирает, при наполнении содержимым блоко, он через ^process вызывает, например, файл /init/text_from_db.p (для соответствующего типа), задача которого переопределить все настройки и вызвать тот код, который строит контент нужного блока.
Пример text_from_db.p:
#Определяем настройки по умолчанию
$cfg[^hash::create[
$.textId[default]
$.textSize(10)
$.textColor[000000]
...
]]
#Далее надо переопределить настройки по умолчанию настройками сначала разделов, потом блоков, а потом страниц...
#...
#И, наконец, занимаемся генерацией содержимого
<p style='font-size: ${cfg.textSize}pt^; color^ #$cfg.textColor'>^string:sql{SELECT text FROM text WHERE id='$cfg.textId'}[$.default{ ^;}]</p>
Безусловно, некоторые вещи здесь не лучшим образом продуманны - это набросок. Его можно "зализать", но как его можно логично упростить и при этом не потерять то, что ВСЕ можно редактировать через веб, я не вижу.
Вариант, который описан здесь:
http://www.parser.ru/forum/?id=3607 на мой взгляд имеет единственный минус - для изменения структуры (добавления страницы, например), надо редактором по FTP добавлять эту страницу с какими-то методами и т.д... Как это редактировать через браузер? Естественно, это не тупая задача ограничится из инструментов только браузером, хочется, что бы получился некий конструктор...какие есть мысли?