Вернуться   Дизайнерский форум » ВЕБ-ПРОГРАММИРОВАНИЕ » Софтодром

CMS - совсем запутался

Обсуждение темы CMS - совсем запутался в разделе Софтодром, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; А зачем они? Гораздо проще взять и выбрать вообще все данные из таблицы — всё равно их будет немного. Ну, можно не выбирать ...


Закрытая тема
 
Опции темы
Старый 06.02.2009, 14:56   #11
А зачем они? Гораздо проще взять и выбрать вообще все данные из таблицы — всё равно их будет немного. Ну, можно не выбирать поле «текст страницы». И обойтись, таким образом, только одним запросом.
 
Старый 06.02.2009, 14:56
Ссылки
Старый 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();
как результат $menu - это уже готовый html (без php) код меню, и был он обработан без eval - то есть быстро.
 
Старый 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
Простовато, кривовато, но сойдёт.
 
Старый 06.02.2009, 17:45
Закрытая тема




Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Яндекс меня разлюбил... Совсем! 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


Текущее время: 14:36. Часовой пояс GMT +4.

Реклама на форуме Условия размещения рекламы
Биржа ссылок Заработай на сайте!
Дизайнерский форум