|
CMS - совсем запуталсяОбсуждение темы CMS - совсем запутался в разделе Софтодром, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; А зачем они? Гораздо проще взять и выбрать вообще все данные из таблицы — всё равно их будет немного. Ну, можно не выбирать ... |
|
Опции темы |
06.02.2009, 14:56 | #11 |
|
А зачем они? Гораздо проще взять и выбрать вообще все данные из таблицы — всё равно их будет немного. Ну, можно не выбирать поле «текст страницы». И обойтись, таким образом, только одним запросом.
|
|
06.02.2009, 15:02 | #12 |
|
deMone, Я предпочитаю (если надо вывести всё дерево сразу) делать один запрос, а дерево строить программно.
|
|
06.02.2009, 15:48 | #13 |
|
Ну, примерно понял. Пасиб.
Вопрос номер два По-поводу шаблонизатора. Скажите сразу, если я идиот. Итак, архитектура: Есть файл index.php. В нём одна строчка — include('_system/lib/parser.php'); Что делает мой парсер (parser.php): У меня есть шаблон страницы index.tpl. Это обычный хтмл, но в места, где будут меню и контент, к примеру, вставлены тэги {MENU} и {CONTENT}. Парсер берет весь файл в массив. Код:
$index = file("tpl/INDEX.tpl"); Код:
$menu = file("_system/frames/menu.php"); $content = file("_system/frames/content.php"); Код:
for($i=0;$i<count($menu); $i++) { $menu_c=$menu_c.$menu[$i]; } for($i=0;$i<count($content); $i++) { $content_c=$content_c.$content[$i]; } А дальше делаю замену: Код:
$index = str_replace("{MENU}",$menu_c,$index); $index = str_replace("{CONTENT}",$content_c,$index); Код:
for($i=0;$i<count($index); $i++) { $a=$a.$index[$i]; } Код:
eval("?>$a<?"); |
|
06.02.2009, 16:09 | #14 |
|
ээээээ, ооооо, аааааа... ОГО.
Ну... ээээ... есть несколько вариантов... Ну начнём с того, что использование функции file в данной реализации... эээ... слегка избыточно (а ционид слегка несъедобен). Гораздо лучше пользоваться file_get_contents - он открывает файл и записывает его содержимое в ОДНУ!!! строку. весь целиком... Потом. Сама суть шаблонизатора - это вставка реального контента на обозначенные места. Лично я делаю шаблоны в виде php-айлов, которые в нужных местах вызывают чтото наподобии <?php showContent('menu'); ?>... Также можно использовать str_replace, ну как реализованно. Тогда места для вставки можно задавать как хочется (ну например как у тебя) В vBulletin, например, используется eval, ну уж в этом случае наши точки вставки мы зовём как переменные то есть $menu $content прямо в коде. Но вот объединение eval и str_replace - по мне так двойная работа... Хотя конечно, в таком случае можно в шаблоне использовать php |
|
06.02.2009, 16:26 | #15 | |
|
Тактактак. Слишком большой поток информации.
По-поводу file_get_contents - пасиб Я тормоз. По-поводу евал и стр_реплейс — так удобнее для работы с html. Не нужно вставлять пхп-код в шаблоны. Тупо {MENU} и всё. Это было одно из условий. Цитата:
|
|
|
06.02.2009, 16:30 | #16 |
|
ну в шаблоне у тя есть {MENU} - это обозначенное место.
а в _system/frames/menu.php у тебя реальный контент. Собственно ты вставляешь содержимое menu.php в {MENU}. Только нафига так запутанно. Вставляются php-файлы? да уж... |
|
06.02.2009, 16:36 | #17 |
|
Запутано только при проектировке. При работе с цмс получается всё просто — {MENU} заменяется на содержимое menu.php. А в menu.php находится код, который генерирует меню из БД. Зачем код вставлять в шаблон? Когда его можно вынести в отдельный "фрейм"?
|
|
06.02.2009, 16:51 | #18 |
|
Понимаешь в чём дело получается. У тебя в результате весь код сваливается в одну большую кучу. Область видимости для всего глобальная. Лично мне такой подход не нравиться. Это правда имхотека. Но по-хорошему Я бы сначала получил бы готовый, сгенерированный текст контента и меню, а потом бы его уже вставил в шаблон. eval работает намного медленнее обычного php-кода. и ты просто допускаешь тормоза.
Например можно сделать так: Код:
ob_start(); include "_system/frames/menu.php; $menu = return ob_get_clean(); |
|
06.02.2009, 17:05 | #19 |
|
Ну тут ты просто сместил генерирование меню из парсера в отдельный блок. Единственное отличие только в евал. Но, на маленьких проектах данное отличие не имеет значения.
Вообщем, спасибо. Подумаю Вопрос третий Модульность. У меня они реализована просто. В таблице со структурой разделов есть такое поле как MOD_NAME, которое может быть пустым, а может содержать имя модуля, например, MY_MODULE. Если оно пустое, то выводится контент этого раздела. Если заполнено, то подключается модуль "modules/MY_MODULE/index.php". Соответственно, все модули хранятся в папке /modules/. index.php — исполняемый файл модуля. Таким образом, я могу вставить в контент любой модуль. А если мне нужно вставить, например, голосовалку на все страницы, то я просто добавляю в шаблон {POLLS}, а в парсере делаю замену {POLLS} на modules/POLLS/index.php Нормально или опять бред сумасшедшего? |
|
06.02.2009, 17:45 | #20 |
|
Простовато, кривовато, но сойдёт.
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Яндекс меня разлюбил... Совсем! | archizona | Поисковые системы | 23 | 23.08.2012 06:46 |
Помогите совсем новичку в html | smailik | HTML, CSS, JavaScript | 15 | 18.01.2010 00:54 |
Помогите совсем новичку. Пожалуйста. | Умница | Библиотека | 14 | 01.03.2007 06:28 |
Работа с массивами. Запутался в простых вещах. | Creator | HTML, CSS, JavaScript | 4 | 09.08.2005 14:41 |
Совсем замучился! Проблема с таблицей! | DruAlex | HTML, CSS, JavaScript | 2 | 30.03.2004 19:55 |
Реклама на форуме
Условия размещения рекламы
Биржа ссылок
Заработай на сайте!
|