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.SU

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


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

> Без описания
DlTA
Отправлено: 26 Августа, 2011 - 02:39:17
Post Id



Постоянный участник


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


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




суть проблемы в том что не могу понять как осуществить следующее
будут файлы с "шаблонами" по типу:
CODE (html):
скопировать код в буфер обмена
  1. <htmlTag>...<?=$myClass->myFunction();?></htmlTag>

тоесть это дело "$myClass->myFunction();" заменится на некий html код который вернет функция
и уже полученный текст будет вставлен гдето в конечном html-е
по логике надо юзать функцию eval но либо я чет не понимаю либо она так не должна работать
например код
PHP:
скопировать код в буфер обмена
  1. $str = file_get_contents("./templates/index.templ");
  2. echo $str;
  3. eval ("\$str = \"$str\";");
  4. echo $str;

где index.templ=

не работает!!
на странице выводится

а по теории должно
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Августа, 2011 - 02:41:08
Post Id



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


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


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




Да щаасс... eval будет выполнять только то что между скобками: <?(.*)?>
 
 Top
DlTA
Отправлено: 26 Августа, 2011 - 02:54:45
Post Id



Постоянный участник


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


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




кажись нашел ответ))
Ch_chov списибо[dot]
(Добавление)
хотя проблема частично осталась
переменные объявленные вне распарсиваемого шаблона не видны в шаблоне(
(Добавление)
единственное что пришло на ум, что будет не сильно грузить систему и сносно для дизайнера:
index.templ:
CODE (html):
скопировать код в буфер обмена
  1. <div> <?=$val[0];?> </div>

PHP:
скопировать код в буфер обмена
  1. $str = file_get_contents("./templates/index.templ");
  2. function parseTemp($templ,$val)
  3. {
  4.   ob_start();
  5.   $templ = ' ?>'.$templ.'<?PHP ';
  6.  eval ($templ);
  7.  $file_cont = ob_get_contents();
  8.  ob_clean();
  9.  return $file_cont;
  10. }
  11. $val[0] = 10;
  12. echo parseTemp($str,$val);
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Августа, 2011 - 06:49:03
Post Id



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


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


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




DlTA пишет:
?>'.$templ.'<?PHP
Да, но иногда еще бывает и короткая запись.
Стоит предусмотреть и этот вариант.
 
 Top
DlTA
Отправлено: 26 Августа, 2011 - 09:53:07
Post Id



Постоянный участник


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


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




DeepVarvar пишет:
Стоит предусмотреть и этот вариант.

А какая разница в каком варианте оформить? насколько я знаю смесь 2-х вариантов не ведет к каким либо отрицательным последствиям
 
 Top
EuGen Администратор
Отправлено: 26 Августа, 2011 - 09:54:17
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Для чего eval, если можно просто include? (см. урок #19)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DlTA
Отправлено: 26 Августа, 2011 - 12:09:04
Post Id



Постоянный участник


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


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




EuGen пишет:
Для чего eval, если можно просто include? (см. урок #19)

PHP:
скопировать код в буфер обмена
  1.  protected function _fetch_segment($template, $rgParams = array())
  2.     {
  3.         extract($rgParams);
  4.         ob_start();
  5.         include VIEWS_PATH.$template.'.phtml';
  6.         return ob_get_clean();
  7.     }

тоже вариант
хотя по сути тоже самое

ОООООО. вспомнил почему он мне не понравился
вот статья в которой проведены стат. выкладки, и к примеру возьмем рабочую ситуацию когда нужно вывесит множество однотипных блоков, например страничку с товарами
по предложенному методу для вывода каждого блока нужно каждый раз инклудить, по моему же методу файл читается один раз а дальше нужное количество раз распарсивается средствами php, тоесть тот же инклуд но без чтения файла
 
 Top
EuGen Администратор
Отправлено: 26 Августа, 2011 - 12:16:29
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




А можно просто записать это все структурировано в 1 файл и сделать include ровно 1 раз.
Здесь скорее дело вкуса, разницы нет. Разве что eval делать плохо тем, что быстродейтствие у него страдает.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DlTA
Отправлено: 26 Августа, 2011 - 12:29:56
Post Id



Постоянный участник


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


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




EuGen пишет:
А можно просто записать это все структурировано в 1 файл и сделать include ровно 1 раз.

насколько я понял подразумевается что то титипа:
template:
PHP:
скопировать код в буфер обмена
  1. for($i=0;$i++;$i<$count)
  2. {
  3.   echo "<div>$val</div>";
  4. }
  5.  

но в данном случае будет не очень красиво с точки зрения шаблона
 
 Top
EuGen Администратор
Отправлено: 26 Августа, 2011 - 12:31:31
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Зачем же так, можно
PHP:
скопировать код в буфер обмена
  1.  
  2. <?for($i=0;$i++;$i<$count):?>
  3.   <div><?=$val?></div>
  4. <?endfor;?>
  5.  


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Августа, 2011 - 12:34:16
Post Id



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


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


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




Хы... А я вообще от шаблонизатора как такового отошел...
Нет, все так же в контексте объекта шаблонизатора идет:

$this->assign("title","Заголовок страницы");

Но никаких лишних инклюд или чтений и парсинга файла нету...

Шаблон просто инклюдится в методе draw шаблонизатора.
Как бы возвращаемся к "началу познания", в шаблоне уже так:

<title><?=$title?></title>

А если "ассигновали" шаблонизатору массив, то прямо в шаблоне же и цикл перебора.
 
 Top
EuGen Администратор
Отправлено: 26 Августа, 2011 - 12:38:14
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Вот и я к тому же (в том же уроке №19 писал), что придумывание псевдоязыков - ни к чему.
Можно то же самое реализовать и на PHP, ничего нового шаблонизатор не дает.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DlTA
Отправлено: 26 Августа, 2011 - 12:51:22
Post Id



Постоянный участник


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


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




EuGen пишет:
можно
PHP:
скопировать код в буфер обмена
 
<?for($i=0;$i++;$i<$count):?>
  <div><?=$val?></div>
<?endfor;?>
 

)) осталось только привыкнуть к такой форме записи
 
 Top
EuGen Администратор
Отправлено: 26 Августа, 2011 - 12:53:36
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Августа, 2011 - 16:59:25
Post Id



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


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


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




DlTA пишет:
осталось только привыкнуть к такой форме записи

ну напишите в такой форме:
PHP:
скопировать код в буфер обмена
  1. <?PHP for ($i=0;$i++;$i<$count) { ?>
  2.   <div><?PHP echo $val; ?></div>
  3. <?PHP } ?>
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« CMS и фреймворки »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB