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 »   

> Без описания
scuter
Отправлено: 09 Мая, 2008 - 19:32:02
Post Id



Посетитель


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


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




я написал пару функций через которые шаблонизирую страници,
раньше этого было достаточно, но сейчас мне необходимо вставить в него конструкции хотябы элементарный IF, подскажите как это сдело по проще и побыстрее,
вот функции шаблонизации,
PHP:
скопировать код в буфер обмена
  1. function tpl_str($haystack, $needle)
  2. {
  3.         return strstr('<--<>'.$haystack.'<>-->', $needle);
  4. }
  5.  
  6. function tpl_replace($search, $replace, $subject)
  7. {
  8.         return str_replace('<--<>'.$search.'<>-->', $replace, $subject);
  9. }
  10.  
  11. function tpl_array_replace($replace, $subject)
  12. {
  13.         if(is_array($replace))
  14.         {
  15.                 foreach ($replace as $key => $val)
  16.                 {
  17.                         if(is_string($val) || is_numeric($val))
  18.                         {
  19.                                 $subject = tpl_replace($key, $val, $subject);
  20.                         }
  21.                 }
  22.                 return $subject;
  23.         }
  24.         else
  25.         {
  26.                 return '';
  27.         }
  28. }
 
 Top
EuGen Администратор
Отправлено: 09 Мая, 2008 - 21:32:47
Post Id


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


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


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




Не понял суть задачи, попробуйте еще раз.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
scuter
Отправлено: 10 Мая, 2008 - 03:55:54
Post Id



Посетитель


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


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




просто в различных других шаблонизаторах,
есть конструкции и цыклы (if, for, switch),
через те функции которые есть можно просто проставить маркеры вшаблоне и вывести через эти функции,
примерно так,
PHP:
скопировать код в буфер обмена
  1. $tpl = file_get_contents('./tpl/index.tpl');
  2. $array = array('top' => 'Шапка', 'left' => 'левый блок', 'right' => 'правый блок', 'content' => 'материал');
  3. $html = tpl_array_replace($array, $tpl);
  4. print $html;


шаблон может быть таким,
CODE (text):
скопировать код в буфер обмена
  1. <table width="100%" border="0" cellpadding="0" cellspacing="0">
  2.         <tr>
  3.                 <td colspan="3"><!--<>top<>--></td>
  4.         </tr>
  5.         <tr>
  6.                 <td><!--<>left<>--></td>
  7.                 <td><!--<>content<>--></td>
  8.                 <td><!--<>right<>--></td>
  9.         </tr>
  10. </table>

функция берёт ключи массива и заменяет их на содержимое,
ну так вот как сделать конструкцию что бы в шаблоне можно было сделать так,
CODE (text):
скопировать код в буфер обмена
  1. <table width="100%" border="0" cellpadding="0" cellspacing="0">
  2.         <!--<>if(top)<>--><tr>
  3.                 <td colspan="3"><!--<>top<>--></td>
  4.         </tr><!--<>endif(top)<>-->
  5.         <tr>
  6.                 <!--<>if(left)<>--><td><!--<>left<>--></td><!--<>endif(left)<>-->
  7.                 <!--<>if(content)<>--><td><!--<>content<>--></td><!--<>endif(content)<>-->
  8.                 <!--<>if(right)<>--><td><!--<>right<>--></td><!--<>endif(right)<>-->
  9.         </tr>
  10. </table>
 
 Top
EuGen Администратор
Отправлено: 10 Мая, 2008 - 18:36:44
Post Id


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


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


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




А почему бы не сделать это не в html а в php?
То есть if(чего-то), то заменять на одно, иначе заменять на другое. Или не в этом суть?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
scuter
Отправлено: 10 Мая, 2008 - 20:19:51
Post Id



Посетитель


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


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




всё просто,
когда я вытаскиваю данные из базы,
всё это дело сразу проходит через шаблонизатор,
когда текста в ячейке нет, это дело заменяется на пустату,
а когда в базе присутствуют ссылки на картинки,
вот с этим получился косяк, пустую картинку отображать нельзя,
и профильтровань переменную которую получаю из базы тоже не могу,
так как таблици создаю не я, поэтому и понадобилось вставить конструкцию.
 
 Top
valenok Модератор
Отправлено: 11 Мая, 2008 - 15:33:34
Post Id



Здесь могла бы быть ваша реклама


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


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




evalom значит.
str_replace("if()",eval(),$str );


-----
Truly yours, Sasha.
 
My status
 Top
scuter
Отправлено: 11 Мая, 2008 - 16:56:47
Post Id



Посетитель


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


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




Цитата:
evalom значит.
str_replace("if()",eval(),$str );

а это как,
я как то сомниваюсь что такое дело прокатит.
PHP:
скопировать код в буфер обмена
  1. function tpl_replace($search, $replace, $subject)
  2. {
  3.     $subject = str_replace("if()",eval(),$subject );
  4.     return str_replace('<--<>'.$search.'<>-->', $replace, $subject);
  5. }
 
 Top
valenok Модератор
Отправлено: 11 Мая, 2008 - 18:19:59
Post Id



Здесь могла бы быть ваша реклама


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


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




Ну так точно не будет работать.
Шаблонизаторы такого рода пишут с парсером .


-----
Truly yours, Sasha.
 
My status
 Top
-SCHATTEN-
Отправлено: 12 Мая, 2008 - 10:50:18
Post Id



Пользователь


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


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




Зачем изобретать велосипед ? юзайте готовые обработчики
 
 Top
SION-ZENIT
Отправлено: 12 Мая, 2008 - 11:10:35
Post Id


Частый гость


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


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




SMARTY
 
 Top
scuter
Отправлено: 12 Мая, 2008 - 17:30:56
Post Id



Посетитель


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


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




Радость Радость Радость
Цитата:
SMARTY

а вот смарти тут савсем не катит,
я так понимаю ни кто париться с этим делом не хочет,
придётся мне самому попариться.
 
 Top
-SCHATTEN-
Отправлено: 13 Мая, 2008 - 08:17:23
Post Id



Пользователь


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


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




Ну phptal поставь. Тоже очень даже хороший шаблонизатор. И почему смарти не подходит ?
 
 Top
scuter
Отправлено: 13 Мая, 2008 - 14:14:14
Post Id



Посетитель


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


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




Цитата:
И почему смарти не подходит ?

смарти занимает много места частенько выдаёт савсем ненужные веши,
там очень большая фильтрация кода, которая савсем не нужна,
к тому же он может вывести то что ненадо выводить,
коточе сптошной косяк в результате получается.
 
 Top
Stierus Супермодератор
Отправлено: 26 Января, 2009 - 16:25:06
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




Вижу, что тема старая, но стало интересно:
Цитата:
коточе сптошной косяк в результате получается.

не мог бы примеры привести? Сколько работал со смарти - всегда как часы, а тут такое - любопытство разыгралось, действительно есть проблема или всё из-за кривых рук.

(Отредактировано автором: 26 Января, 2009 - 17:07:47)

 
My status
 Top
EuGen Администратор
Отправлено: 26 Января, 2009 - 17:09:45
Post Id


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


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


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




Смарти вещь хорошая, но из-за того, что тяжеловат, не очень люблю. Но так вообще других компромиссов в альтернативу вспомнить не могу.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB