Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Шаблоны в php [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (4): « 1 [2] 3 4 »   

> Без описания
DeepVarvar Супермодератор
Отправлено: 30 Ноября, 2010 - 12:17:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




frizz пишет:
это надо курить
с того и надо было начинать... Может сделать? Пиши в личку. (за еду поработаю)
 
 Top
ALEN
Отправлено: 30 Ноября, 2010 - 12:17:57
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Вот не понимаю, какая разница писать:
{$str} или <?=$str?> - второй вариант всегда на 3 символа длиннее, но во много раз быстрее
 
 Top
DeepVarvar Супермодератор
Отправлено: 30 Ноября, 2010 - 12:20:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




я не {$str} пишу а {str} и как правило не одиночными переменными вывожу а обьект или массив высаживаю сразу в шаблон
 
 Top
ALEN
Отправлено: 30 Ноября, 2010 - 12:24:35
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




DeepVarvar
хорошо на 4 символа больше, но факт в скорости остается фактом, а еще как вывести в твоей конструкции константу? А еще можно ли реализовать foreach или if ???
 
 Top
DeepVarvar Супермодератор
Отправлено: 30 Ноября, 2010 - 12:33:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Рекурсия не возможна в этом примере, условие if невозможно, константу вывести можно засунув её значение во входной реплейс-массив... По скорости согласен - медленно... Однако это всего лишь наскоро намалеваный пример...
 
 Top
ALEN
Отправлено: 30 Ноября, 2010 - 12:43:13
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




DeepVarvar
Ну кроме тебя никто его, зня хоть на секунду пхп, не будет идти таким путем. Дизайнеру пофиг как писать, он через 5 минут привыкнет, но функционал уйдет в попу. Если хочешь идти своим путем, то пиши класс, где будешь присваивать значения к названию и его так вписывать. После обработки шаблона записывай шаблон во врменный файл и выполняй. Но в таком случае лучше используй уже готовый шаблонизатор, а то что ты пишешь - это самое большое фуфло, которое просто тормозит скрипт. Тем более, что ты своими рекурсиями и т.д. все равно мешаешь шаблон с кодом, что указывает на НЕ выполнение задачи и конструкции MVC.

P.S. Товарищи не гонитесь за ПОНТАМИ, делайте так, чтоб это работало четко и быстро, а код был аккуратным. А в выше указанном варинте нет ни одного плюса перед НЕ использованием шаблонизатора.
 
 Top
DeepVarvar Супермодератор
Отправлено: 30 Ноября, 2010 - 12:55:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ALEN пишет:
записывай шаблон во врменный файл и выполняй
это еще зачем???
ALEN пишет:
все равно мешаешь шаблон с кодом
где это???

Я соглашусь только с твоим аргументом в скорости.
 
 Top
frizz
Отправлено: 30 Ноября, 2010 - 13:10:49
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




Улыбка

(Отредактировано автором: 30 Ноября, 2010 - 13:17:29)

 
 Top
DeepVarvar Супермодератор
Отправлено: 30 Ноября, 2010 - 13:20:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




это случаем не код в шаблоне??? )))))))))))))))))))
 
 Top
ALEN
Отправлено: 30 Ноября, 2010 - 16:00:41
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




DeepVarvar
Это обычный вывод переменной, а теперь скажи пожалуйста, как ты будешь выводить 10 новостей на страницу?
(Добавление)
Мой вариант будет в шаблоне с нечто:
PHP:
скопировать код в буфер обмена
  1. <?PHP foreach(....){ ?>
  2. шаблон с выводом <?=$value['name']?>
  3. <?PHP } ?>


А вот массив и содержимое $value['name'] - уже давно будет отфармотировано под любой шаблон, а вычисление будет сделано в исполняющем файле. А ты все это будешь делать в исполняющем файле, т.к. у тебя нельзя выполнять циклы и т.д.
(Добавление)
DeepVarvar
И еще постарайся понять, что мешать код с шаблоном - заключается не в том, чтоб в шаблоне небыло php тегов, а чтоб не было вычислений никаких, только необходимые, без который не выйти. Т.е. никаких запросов к БД и т.д. в шаблоне быть не должно, это ты должен сделать до шаблона.
 
 Top
DeepVarvar Супермодератор
Отправлено: 30 Ноября, 2010 - 18:07:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ALEN так и есть - все вычисления до вывода, по мере надобности читая файл(ы) шаблона(ов) или его(их) часть(и) в накопительный буфер (если надо циклом - либо через доп-буфер, либо прямой конкатенацией, смотря что подойдет), потом вывод УЖЕ ГОТОВОЙ страницы из буфера.

В твоем же случае файл шаблона инклюдится ниже по коду и ВЫПОЛНЯЕТСЯ с замещением пхп-тегов на значение переменных + если надо, повторяет некий текст для циклового вывода (читай ИСПОЛНЯЕТ)... И пока он не прошпарит весь твой шаблон, вывода не будет...

В моем же случае функция str_replace('вася','петя','вася вася вася'); не делает три телодвижения для замены трех вась на трех петь - она их за один раз шлёпает...

Щас продемонстрирую по твоему (действия сверху вниз):
{вычисления}
{инклюд шаблона}
{исполнение шаблона}
{вывод}

Теперь мой вариант:
{вычисления}
{чтение шаблона в буфер}
{обработка строк}
{вывод}

Да - разница есть (небольшая совсем), но это всего лишь разные подходы. Мой медленнее, сам знаю это - особо много лишних движений при циклах в подшаблоне. Но по поводу разделения тегов и кода - у меня оно полное и абсолютно независимое друг от друга. Пусть верстальщик хоть в глаза себе на**ыт - циклов там не будет. А я не буду заморачиваться с его шаблонами...
Мои кодовые проблемы - только мои... Его проблемы - только его...

Вот так я готовлю и сразу сплевываю всю страницу:
PHP:
скопировать код в буфер обмена
  1.         private function output() {
  2.                 $mypage = new buffer;
  3.                 $mypage->send($this->readtemplate($this->template));
  4.                 $mypage->parse($this->replace);
  5.                 header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
  6.                 header('Cache-Control: no-store, no-cache, must-revalidate');
  7.                 header('Cache-Control: post-check=0, pre-check=0', false);
  8.                 header('Pragma: no-cache');
  9.                 header('Content-Type: text/html; charset=utf-8');
  10.                 echo $mypage->read();
  11.                 }

И где тут теги или шаблоны??? Да я их в глаза не вижу на протяжении всех расчетов... Валяются в папке templates и хрен с ним...

А вот так я делаю вывод в цикле:
PHP:
скопировать код в буфер обмена
  1. $return = $db->query($query);
  2. $db->close();
  3. if ($return) {
  4.         $loop = new buffer;
  5.         $tpl = $this->readtemplate('templates/loop.tpl.php'); // к примеру
  6.         foreach ($return as $value) {
  7.                 $loopreplace = $this->parse($value);
  8.                 $loop->send($tpl);
  9.                 $loop->parse($loopreplace);
  10.                 $this->replace['putcontent'] .= $loop->read();
  11.                 }

$return - это ассоциативный массив (ключи = имена полей в таблицах БД) или false если вернуло 0 строк...
В $this->replace['putcontent'] записан уже весь цикл новостей, теперь он пойдет в output(); , loop-буфер уже умер, освободив ресурсы..

Ты один раз пишешь в шаблон свой foreach - я один раз пишу его в коде. У меня больше строк? Сложи то что ты пишешь при расчетах и то что ты пишешь в шаблоне..

(Отредактировано автором: 30 Ноября, 2010 - 20:12:51)

 
 Top
ALEN
Отправлено: 30 Ноября, 2010 - 21:01:12
Post Id



Участник


Покинул форум
Сообщений всего: 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 без общепринятого понятия шаблонизатор.
 
 Top
JustUserR
Отправлено: 30 Ноября, 2010 - 21:06:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ALEN пишет:
Товарищи не гонитесь за ПОНТАМИ, делайте так, чтоб это работало четко и быстро, а код был аккуратным
В качестве возможного средства оптимальной реализации системы шаблонизации допустимо использование набора статических управляющих страниц - включающих в себя разделенное описание дизайна и элементов управления в соответсвии со специфицируемым логическим описанием - в таком случае допустимо осуществление кеширование отдельных компонентов для увеличения быстродействия


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ALEN
Отправлено: 30 Ноября, 2010 - 21:18:46
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




JustUserR
Вот не понять тебя ты меня критикуешь или поддерживаешь?
Если критикуешь - то кэширование отдельных частей возможно и в моем варинте, модель MVC для этого и приспособлена.

Приведу пример того же смарти, он переводит свой синтаксис в обычный php (сохраняя код во временный файл), после чего просто его присоединяет с помощью include .

PHP:
скопировать код в буфер обмена
  1. Почему же смарти так делает?

Все связано с тем, что это готовый класс уже, он сам выполняет за вас большинство задач, не только в пхп, но и js к примеру, поэтому легко может себе позволить такие действия и без них ему никак,

Я в свою очередь не нуждаюсь в дополнительном функционале смарти (его легкой работе с js) поэтому по сути вырезаю тот самый момент чтения и обработки шаблона (чем и ускоряю работу скрипта) + сам без него кэширую данные и т.д.
 
 Top
JustUserR
Отправлено: 30 Ноября, 2010 - 21:35:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ALEN пишет:
JustUserR Вот не понять тебя ты меня критикуешь или поддерживаешь?
Возможность включения кеширования для отдельных компоненов генерируемого пользовательского преставления web-страницы в действительности является полезной возможностью - особенность которой провялется в допустимости сохранения не только крупных блочных объектов повторных запрос которых может и не осуществляться в скором времени - а примение кеширования промежуточных представлений генерируемого web-содержимого


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (4): « 1 [2] 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB