Доброго дня ! Есть простенький парсер шаблонов (отсюда http://www.codenet.ru/webmast/php/Templates-About.php) Вывожу с его помощью в цикле анонс: PHP: $parse->get_tpl('templates/anonsmedia.tpl'); while($media = mysql_fetch_array($mediaget)) { $parse->set_tpl('{TITLE}',$media['title']); $parse->set_tpl('{ID}',$media['id']); $parse->set_tpl('{DATE}',$media['date']); $parse->set_tpl('{PROPS}',$media['props']); $parse->tpl_display(); } Шаблон: Код (Text): <table class="shortanons"> <tr><td style='width:88px;height:88px;' align='center' rowspan='2'>{MEDIAIMG}<br /></td> <td style='width:2px;' rowspan='2'> </td> <td height="52" align="left" valign="middle"> {TITLE}... <a href='media&read&id={ID}'></a> </td></tr> </table> Все работает за исключением одного момента, каждый проход цикла выводит одни и те же данные на экран, хотя если сделать вывод переменной в этом же цикле ($media['title'] к примеру), то видно что ее значение меняется, а после парсинга шаблона почему то {TITLE} всегда заменяется на $media['title'], которая была при первом проходе цикла. Почему такое может происходить ? :?:
Spirtt0 Ошибка реализации шаблонизатора, видимо. Вместо того, чтобы работать динамично, каждый раз с новыми данными, он генерирует статику и потом тупо отдает один и тот же HTML фрагмент. Выходов два - либо самому починять этот шаблонизатор, либо использовать другой. Попробуйте $parse->get_tpl(...) перенести внутрь цикла.
Очень похоже на это. Спасибо ! это помогло, но получается что каждый проход парсер будет загружать шаблон с диска ? Или в таких случаях он кешируется сервером и это не сильно влияет на скорость работы скрипта ?
Spirtt0 Да, видимо, файл будет читаться снова и снова. Кешируется-то он кешируется, но все равно такой вариант выглядит несколько неразумно. Напишите аффтору этого "шаблонизатора" разгромный отзыв заодно скажите ему, что заменять переменные значениями в цикле, используя str_replace - порочный алгоритм... если уж делать это "на лету", то через strtr().
Чтож будем разбираться Там и без меня уже высказались А чем плох str_replace , большая часть шаблонизаторов его использует ?
Spirtt0 Он алгоритмически неверен. Замена идентификаторов на значения происходят не одновременно, а по очереди, сначала первый идентификатор, потом второй и т. д. Теперь представьте, что внутри значения одного идентификатора оказалось название другого идентификатора: {PROPS} => 'Новая игра от {ID} Software.' {ID} => 12345 Если в шаблоне встречается 'Новинка! {PROPS}', то в результате получится не 'Новинка! Новая игра от {ID} Software.', а 'Новинка! Новая игра от 12345 Software.', потому что при втором проходе шаблонизатор зацепит не только исходный шаблон, но и уже подставленные значения. А это чревато багами, уязвимостями и т. п.