Скажите пожалуйста где я неправ Есть фал шаблона называется bit.html в нём есть вот такие строчки Код (Text): <ul> <li>[TER]</li> <li>[BID]</li> </ul> есть код для обработки шаблона PHP: $dev .= file_get_contents('dir/bit.html');//Получаю содержимое файла в виде одной строки $ver = str_replace('[TER]', 'Название', $dev);//Заменяю строку поиска на строку замены $tyr = create_function('$w', 'include "upload/$w";');//Создаю анонимную функцию $ver = str_replace('[BID]', $tyr('file.php'), $ver);//Заменяю строку поиска на строку замены echo $ver; в файле file.php простой код PHP: <?php echo 'текст'; ?> с выводом [TER] всё хорошо а вот с [BID] беда выводится, но не в шаблон, а сверху, где я не прав, грешу на create_function(); но не знаю как сделать правильно
сама по себе реализация через одно место. насколько я знаю, в шаблонизаторах так не делается. создаётся класс шаблонизатора и к нему происходит обращение. т.е. код файла file.php при нормальном подходе должен быть: PHP: <?php $templater = new Templater('dir/bit.html'); $ter = 'some text'; $bid = 'text bid' $templater->set('TER', $ter); $templater->set('BID', $bid); $templater->show(); ?>
я не спорю, но тут как бы у меня задача не переписывать вывод из шаблона, а понять почему файл с include не хочет выводится через шаблон PHP: $tyr = create_function('$w', 'include "upload/$w";');//Создаю анонимную функцию $ver = str_replace('[BID]', $tyr('file.php'), $ver);//Заменяю строку поиска на строку замены
Идельный шаблонизатор где-то там - http://www.php.ru/forum/viewtopic.php?t=11926 Эту тему можно издать как книгу ))
для начала следует понять разницу между инклудом и чтением файла. в данном случае нужно просто считать файл в переменную, а не инклудить его. насчёт динамического создания функции - забудь, тут это лишнее. PHP: function tyr($filename){ $content = file_get_contents($filename) or die("File {$filename} cannot be read"); return $content; } $ver = str_replace('[BID]', tyr('file.php'), $ver); содержимое file.php ================== текст ==================
да всё работает но тут есть проблема она корректно работает только с текстом в вот если в файле file.php такой код то он просто его читает и не исполняет. вот тут у меня загвоздка PHP: <?php $row = mysql_query('SELECT * FROM name;'); ?> <table cellpadding="0" cellspacing="0"> <?php while ($result = mysql_fetch_assoc($row)){ ?> <tr> <td><a href="<?php echo $row['werte'] ?>"><?php echo $row['reter'] ?></a></td> </tr> <?php } ?> </table>
при инклуде код файла ВЫПОЛНЯЕТСЯ. сразу! т.е. вывод будет сделан по ходу выполнения. в твоём случае выход только один - использовать нормальный шаблонизатор. ты хочешь совместить несовместимое. когда-то раньше я тоже хотел это совершить пользуйся функциями
а есть ли функции в php чтобы вывести что генерирует файл например file.php то есть задумка такая 1) генерируем файл (получаем в виде кода html) 2) с функцией file_get_contents //Получаем содержимое файла в виде одной строки 3) с функцией str_replace //Заменяем строку поиска на строку замены
ds837 Вообще надо в функции делать PHP: ob_start(); include "upload/$w"; return ob_get_clean(); но это страшно, криво, убого и бессмысленно O.O
[vs] спасибо это то что нужно, сделал так PHP: function bler($w) { ob_start(); include "upload/$w"; return ob_get_clean(); } $dev .= file_get_contents('dir/bit.html');//Получаю содержимое файла в виде одной строки $ver = str_replace('[TER]', 'Название', $dev);//Заменяю строку поиска на строку замены $ver = str_replace('[BID]', bler('file.php'), $ver);//Заменяю строку поиска на строку замены особо время на генерацию страницы не увеличилось, останавливаюсь на этом варианте, так как это лучше чем выводит html теги с помощью php. Gromo спасибо за объяснение того чего я не понимал