CMS. Размышления...

Bosha

Новичок
CMS. Размышления...

Добрый день.

Есть желание облегчить себе работу и написать простенькую CMSку с подключаемыми модулями для расширения ф-циональ. Основой должен стать движок который будет генерить страницы и управлять структурой сайта.
Тут встает вопрос о том как правильно работать с шаблонами. Не хочется привязываться к стандартной и самой простой схеме - Шапка, верхнее меню, левое меню и колонка, активная зона.
Хотелось бы дать возможность произвольного дизайна для каждой страницы, но я не знаю как это правильно организовать.
Как правильно хранить html страниц? В базе или файлах

Есть вариант хранить целиком активную зону и дизайн для каждой страницы (использовать разделитель скажем <activearea></activearea> для определения активной зоны, которую потом парсить в html редактор. А все остальное выводить в разделе скажем Изменение дизайна.

Если у кого-то есть комментарии или соображения буду очень благодарен за помощь.
 

inTox

вёбных дел мастер
я бы использовал xml+xslt. в плане разделения кода и представления неплохое решение.
 

Bosha

Новичок
Да, вполне возможно.
Может тогда хранить скажем содерж. активной зоны, принадлежность к разделу и ссылку на дизайн в xml.
Я чесно говоря в этом слабо шарю. Как правильно было бы реализовать это через xml?
 

inTox

вёбных дел мастер
может я от жизни отстал, но "активная зона" — это что за зверь?
 

Rezec

По пиву? (socket80)
Каждая страница или группа страниц обладает свойствами:
PHP:
$page = array(
'id'=>1,
'layout'=>'layout_1.tpl',
'left'=>array(
  'menu_module',
  'poll_module'
 )
);
Ну а дальше дело техники
 

Bosha

Новичок
Ага, то-есть при создании страницы, просим пользователя ввести html шаблона который пишем в 'layout_1.tpl' или использовать уже существующие шаблоны.

'left'=>array(
'menu_module',
'poll_module'
)
Это я так понимаю то, какие модули будем выводить в данном случае в левую часть.
Тогда мы более или менее оказываемся привязаны к структуре общей шаблона.
А если шаблон это просто таблица без ярко выраженной "левой" или "правой" части, а является контейнером для картинок порезанных из шопа.
Тогда выходит что активные элементы, модули будут включаться в хтмл какими-то спец. тегами.

-~{}~ 06.07.04 18:08:

Автор оригинала: inTox
может я от жизни отстал, но "активная зона" — это что за зверь?
Я имею ввиду ту часть страници которая изменяется. Все остальные остаются неизм (меню, шапка, низ..)
 

inTox

вёбных дел мастер
тогда ты можешь используя DOM создавать xml-документ, содержащий структурированные данные: информацию о разделах и подразделах, данные текущего объекта, и с помощью xslt-таблицы трансформировать его в html и выводить посетителю. почитай статьи на деталях - там все написано.
 

Rezec

По пиву? (socket80)
Я не совсем понимаю в чем проблема
Но все же - вызываем menu_module (class||function) и результат добавляем в определенное место шаблона.
 

Bosha

Новичок
Да уже почти выкристализовалась решение.
Я думаю над xml. Вполне возможно что я недооцениваю технологию, поскольку слабо с ней з наком.
Но на пхп сложилось такая схема.

В базе храним
1)id,
2)название шаблона,
3)список модулей (кодовые слова напр. newsline и теги по которым его вставлять должны определяться в самом модуле при инсталяции),
4)title,
5)metainfo,
6)и контент основной части страницы в хтмл,
7)а так же урл с категориями. Напр. /categ1/page1 При запросе www.domain.com/categ1/page1.html отрезаем .html и выбираем данные из базы по этому полю если такого нет инклудим 404.htm

вся система отображения страниц укладывается в один файл на который все запросы и переправляются.

Но тут другой вопрос:
насколько корректно делать выборку из базы по полю varchar?
И как хранить список используемых модулей? И имеет ли это смысл вообще? Может при разборе шаблона создавать массив из назв. установленных модулей и соответствующим им кодовым словам. И если они есть в шаблоне - просто их подставлять.

-~{}~ 06.07.04 18:34:

Ой, я вообще понятно изьяснился?
 

inTox

вёбных дел мастер
как хранить список используемых модулей
если он у тебя не меняется каждый день - храни в массиве и правь ручками.
Может при разборе шаблона создавать массив из назв. установленных модулей и соответствующим им кодовым словам. И если они есть в шаблоне - просто их подставлять.
логичнее было бы наоборот - подключать шаблон модуля только если он требуется. подумай над этим хорошенько.
 

IntenT

SkyDiver
Bosha
Ты трогаешь слона не с той стороны
И слушаешь советчиков, не написавших ни одной ЦМС.
Как ты думаешь, много хорошего они тебе насоветуют??
 

Bosha

Новичок
Автор оригинала: IntenT
Bosha
Ты трогаешь слона не с той стороны
И слушаешь советчиков, не написавших ни одной ЦМС.
Как ты думаешь, много хорошего они тебе насоветуют??
Я буду рад если мне подскажут правильную сторону слона :)

-~{}~ 06.07.04 18:50:

Автор оригинала: inTox
если он у тебя не меняется каждый день - храни в массиве и правь ручками.

логичнее было бы наоборот - подключать шаблон модуля только если он требуется. подумай над этим хорошенько.
Тоесть получается что модуль включаем если он включен в свойства страницы?
Но в шаблоне может быть код определяющий место вставки, а вбазе может модуль может быть не определен для этой страници. С одной стороны кажется удобным, но сдругой делает процедуру разработки шаблона сложнее.
Если пользователь забудет вставить определитель в шаблон, но вставит определит в базе выйдет непонятка.
 

inTox

вёбных дел мастер
есть страница(скрипт), которая инициализирует нужный модуль(возможно класс), который обрабатывает свои данные (возможно выводит) в зависимости от внешних параметров.
определись, на каком уровне определяется шаблон вывода данных - страницы, модуль, или данные?
 

Crimson Death

Guest
Я бы сделал так: допустим, меню описал бы в каком - нить файле в виде функции и прдал два значения, например, flat и button, а потом в нужном месте вставил.
А можно и так :
$HEADER = "
<div style='text-align:center'>
<table style='width:100%' cellspacing='3'><tr><td colspan='3' style='text-align:left'>
{LOGO} // эти значения заранее описать...
<br />
{SITETAG}
</td></tr><tr> <td style='width:15%; vertical-align: top;'>
{SETSTYLE=leftmenu}
{SITELINKS=menu}
{MENU=1}
</td><td style='width:70%; vertical-align: top;'>
";
 

Bosha

Новичок
Автор оригинала: inTox
есть страница(скрипт), которая инициализирует нужный модуль(возможно класс), который обрабатывает свои данные (возможно выводит) в зависимости от внешних параметров.
определись, на каком уровне определяется шаблон вывода данных - страницы, модуль, или данные?
Я думаю, что правильнее было-бы определять шаблон на уровне данных то есть в базе. Или я что-то не так понял в твоем посте.
Вообще, во включении модуля в шаблон я усматриваю две стороны:
1) Что включать
2) куда включать
Я склоняюсь к тому, что бы определять нужные модули после разбора шаблона. Модули не будут подгружаться заранее. Их список существует ввиде отдельной таблицы данные из которой я вытягиваю при заргузке каждой страницы и использую для поиска ключевых слов в модуле, если какое-то ключ. слово найдено и опознано подключ модуль.
Мне кажется это лучше чем хранить список модулей для каждой страницы. В этом случае указывать КУДА включать все равно прийдется.
 

inTox

вёбных дел мастер
Я думаю, что правильнее было-бы определять шаблон на уровне данных то есть в базе. Или я что-то не так понял ...
боюсь что ты понял с точностью до наоборот.
для тех кто в танке: модуль обрабатывает данные. данные выводятся с помощью шаблона и это тоже обработка. следовательно шаблон для этих данных должен определяться в самом модуле. шаблон может храниться хоть в базе, хоть в файле.

то, как ты предлагаешь - это хранить логику в шаблонах. сомнительная архитектура.
 

Bosha

Новичок
Ок. Что тогда значит "определить шаблон".
Является ли доставание имени шаблона из базы с последующим
include($row[template]);
определением шаблона?
 

Bosha

Новичок
Автор оригинала: inTox
...то, как ты предлагаешь - это хранить логику в шаблонах. сомнительная архитектура.
Разве это хранить логику в шаблонах? Ну разве что косвенно...

Я хочу указать в шаблоне МЕСТО для подстановки скажем таблицы с новостями. А как определить что в это место надо вставить именно новости а не скажем голосование?

Вот мне и показалось, что тэг к примеру
<news></news> решит все проблемы. То, что этим тэгом определяется место подстановки именно модуля новостей записанно в определении модуля в базе.

Этот тэг <news></news> в любом случае надо вписывать ручками в шаблон.
Или как иначе определить куда его подставлять? А если так, то зачем еще дублировать запись о наличии модуля news на этой странице в базе?
Я абсолютно согласен что в базе было бы правильнее, но как
разрешить эту делему:
или двойное определение или неясно точно куда в ставить модуль????
 
Сверху