Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008 Откуда: Крым
Помог: 11 раз(а)
DeepVarvar
хорошо на 4 символа больше, но факт в скорости остается фактом, а еще как вывести в твоей конструкции константу? А еще можно ли реализовать foreach или if ???
DeepVarvar
Отправлено: 30 Ноября, 2010 - 12:33:53
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Рекурсия не возможна в этом примере, условие if невозможно, константу вывести можно засунув её значение во входной реплейс-массив... По скорости согласен - медленно... Однако это всего лишь наскоро намалеваный пример...
Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008 Откуда: Крым
Помог: 11 раз(а)
DeepVarvar
Ну кроме тебя никто его, зня хоть на секунду пхп, не будет идти таким путем. Дизайнеру пофиг как писать, он через 5 минут привыкнет, но функционал уйдет в попу. Если хочешь идти своим путем, то пиши класс, где будешь присваивать значения к названию и его так вписывать. После обработки шаблона записывай шаблон во врменный файл и выполняй. Но в таком случае лучше используй уже готовый шаблонизатор, а то что ты пишешь - это самое большое фуфло, которое просто тормозит скрипт. Тем более, что ты своими рекурсиями и т.д. все равно мешаешь шаблон с кодом, что указывает на НЕ выполнение задачи и конструкции MVC.
P.S. Товарищи не гонитесь за ПОНТАМИ, делайте так, чтоб это работало четко и быстро, а код был аккуратным. А в выше указанном варинте нет ни одного плюса перед НЕ использованием шаблонизатора.
DeepVarvar
Отправлено: 30 Ноября, 2010 - 12:55:03
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008 Откуда: Крым
Помог: 11 раз(а)
DeepVarvar
Это обычный вывод переменной, а теперь скажи пожалуйста, как ты будешь выводить 10 новостей на страницу? (Добавление)
Мой вариант будет в шаблоне с нечто:
А вот массив и содержимое $value['name'] - уже давно будет отфармотировано под любой шаблон, а вычисление будет сделано в исполняющем файле. А ты все это будешь делать в исполняющем файле, т.к. у тебя нельзя выполнять циклы и т.д. (Добавление) DeepVarvar
И еще постарайся понять, что мешать код с шаблоном - заключается не в том, чтоб в шаблоне небыло php тегов, а чтоб не было вычислений никаких, только необходимые, без который не выйти. Т.е. никаких запросов к БД и т.д. в шаблоне быть не должно, это ты должен сделать до шаблона.
DeepVarvar
Отправлено: 30 Ноября, 2010 - 18:07:15
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
ALEN так и есть - все вычисления до вывода, по мере надобности читая файл(ы) шаблона(ов) или его(их) часть(и) в накопительный буфер (если надо циклом - либо через доп-буфер, либо прямой конкатенацией, смотря что подойдет), потом вывод УЖЕ ГОТОВОЙ страницы из буфера.
В твоем же случае файл шаблона инклюдится ниже по коду и ВЫПОЛНЯЕТСЯ с замещением пхп-тегов на значение переменных + если надо, повторяет некий текст для циклового вывода (читай ИСПОЛНЯЕТ)... И пока он не прошпарит весь твой шаблон, вывода не будет...
В моем же случае функция str_replace('вася','петя','вася вася вася'); не делает три телодвижения для замены трех вась на трех петь - она их за один раз шлёпает...
Щас продемонстрирую по твоему (действия сверху вниз):
{вычисления}
{инклюд шаблона}
{исполнение шаблона}
{вывод}
Теперь мой вариант:
{вычисления}
{чтение шаблона в буфер}
{обработка строк}
{вывод}
Да - разница есть (небольшая совсем), но это всего лишь разные подходы. Мой медленнее, сам знаю это - особо много лишних движений при циклах в подшаблоне. Но по поводу разделения тегов и кода - у меня оно полное и абсолютно независимое друг от друга. Пусть верстальщик хоть в глаза себе на**ыт - циклов там не будет. А я не буду заморачиваться с его шаблонами...
Мои кодовые проблемы - только мои... Его проблемы - только его...
$tpl=$this->readtemplate('templates/loop.tpl.php');// к примеру
foreach($returnas$value){
$loopreplace=$this->parse($value);
$loop->send($tpl);
$loop->parse($loopreplace);
$this->replace['putcontent'].=$loop->read();
}
$return - это ассоциативный массив (ключи = имена полей в таблицах БД) или false если вернуло 0 строк...
В $this->replace['putcontent'] записан уже весь цикл новостей, теперь он пойдет в output(); , loop-буфер уже умер, освободив ресурсы..
Ты один раз пишешь в шаблон свой foreach - я один раз пишу его в коде. У меня больше строк? Сложи то что ты пишешь при расчетах и то что ты пишешь в шаблоне..
Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008 Откуда: Крым
Помог: 11 раз(а)
DeepVarvar
Ты мне привел только часть из своего кода, которая не имеет значимости и мой пример таков:
- вычисление
- вывод шаблона
Я шаблон не обрабатываю, конечный этап если понадобится можно обработать с помощью ob_start() , а ты не понятно зачем выполняешь много всего, вот пример моей работы:
-получаю параметры урл
-вытаскиваю из бд инфо о странице
- подключаю согласно индексу страницы исполняемый файл, в котором например по условным операторам выполняются действия согласно полученным данным из метода пост и гет, например просто вывести 10 страниц из БД, я в массив загоняю все нужные данные, потом убиваю на этом этапе промежуточные параметры и оставляю массивом (внутри данных нет шаблонов еще совсем)
- подключаю инклудом общий шаблон страницы
- в нем инклудом вставляю например содержимое
- в самих отдельных файлах от разделов я применяю параметры if и foreach и вывод как я тебе показывал
Заметь данные после подключения шаблона сразу выводятся на экран, если конечно я не устанавливаю ob_start()
Почему именно так?
1) Не нужно читать шаблон и обрабатывать его
2) Чтоб создать раздел в системе мне по сути нужно сделать одну запись в таблицу в БД + создать 2 файла (исполняемый и шаблон), т.е. если страница с индексом news - то исполняемый файл будет news.php и шаблон news.php - только в разных папках, т.е. ты знаешь наверняка куда лезть, чтоб поправить то или иное, а по данным из гет , ты ориентируешься по условным операторам.
3) Так как мой шаблон это часть php программы выходит, то он работает гараздо быстрее любого шаблонизатора, а если, что я делаю предварительную обработку данных и кэширую все.
Я любого верстальщика обучу за 5-10 минут писать для меня шаблоны и ему не нужно будет лазить по всей системе, только один файл, если придет программист, то для него 2 файла - а сам движок - выходит просто авторизация, обработка url , соединение с БД и другие действия встречающиеся на любой php странице.
Лично я переболел болезнью которой ты сейчас страдаешь, еще 4 года назад и тогда всем доказывал, что так круто, но это не так, если у тебя система под свои цели не использую шаблонизатор, если тебе просто нужно решить задачу - бери смарти или другие, а если ты собрался делать крутой проект, то напиши свой (если ты сможешь сделать лучше чем смарти, в ином варианте бери смарти).
В моих задачах инкапсуляция данных не нужна, я те данные которые не должны попасть до шаблона , я убью их до вывода (пароли от БД и другие секретные данные) и не буду загружать ими сервер. Поэтому я использую модель MVC без общепринятого понятия шаблонизатор.
JustUserR
Отправлено: 30 Ноября, 2010 - 21:06:19
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
ALEN пишет:
Товарищи не гонитесь за ПОНТАМИ, делайте так, чтоб это работало четко и быстро, а код был аккуратным
В качестве возможного средства оптимальной реализации системы шаблонизации допустимо использование набора статических управляющих страниц - включающих в себя разделенное описание дизайна и элементов управления в соответсвии со специфицируемым логическим описанием - в таком случае допустимо осуществление кеширование отдельных компонентов для увеличения быстродействия
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
ALEN
Отправлено: 30 Ноября, 2010 - 21:18:46
Участник
Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008 Откуда: Крым
Помог: 11 раз(а)
JustUserR
Вот не понять тебя ты меня критикуешь или поддерживаешь?
Если критикуешь - то кэширование отдельных частей возможно и в моем варинте, модель MVC для этого и приспособлена.
Приведу пример того же смарти, он переводит свой синтаксис в обычный php (сохраняя код во временный файл), после чего просто его присоединяет с помощью include .
Все связано с тем, что это готовый класс уже, он сам выполняет за вас большинство задач, не только в пхп, но и js к примеру, поэтому легко может себе позволить такие действия и без них ему никак,
Я в свою очередь не нуждаюсь в дополнительном функционале смарти (его легкой работе с js) поэтому по сути вырезаю тот самый момент чтения и обработки шаблона (чем и ускоряю работу скрипта) + сам без него кэширую данные и т.д.
JustUserR
Отправлено: 30 Ноября, 2010 - 21:35:37
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
ALEN пишет:
JustUserR Вот не понять тебя ты меня критикуешь или поддерживаешь?
Возможность включения кеширования для отдельных компоненов генерируемого пользовательского преставления web-страницы в действительности является полезной возможностью - особенность которой провялется в допустимости сохранения не только крупных блочных объектов повторных запрос которых может и не осуществляться в скором времени - а примение кеширования промежуточных представлений генерируемого web-содержимого
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.