Вверх ↑
Этот топик читают: Гость
Ответов: 122
Рейтинг: 2
#1: 2013-10-25 18:17:58 ЛС | профиль | цитата
есть строка со смешанной в ней HTML и PHP кодом. при echo $строка; - выдаёт всю данную крындетень с PHP кодом (т.е. в браузере видно <?php ... ?>).
задача - выполнить данный PHP код из строки и не "повредить" HTML.

читал статейки, наткнулся на "eval". А как применить без "повреждений"(eval($string);) HTML не понимаю.
карма: 0

0
Ответов: 4628
Рейтинг: 749
#2: 2013-10-25 18:21:05 ЛС | профиль | цитата
PHP исполняется сервером и выдает результат браузеру. Имеется настроенный сервер с PHP?
карма: 26

0
Ответов: 122
Рейтинг: 2
#3: 2013-10-25 18:25:23 ЛС | профиль | цитата
Netspirit, всё имеется. только это добро(строка со смешанной в ней HTML и PHP кодом) грузится моим хирто*опым способом(исходники могу "подогнать" только завтра) из *.tpl файла (там HTML и мои теги(грузят другие *.tpl файлы) например {head}, {scripts} итд, которые идеально работают)

Если не затруднит то помогите или скиньте ссыль на учебник по tpl
карма: 0

0
Ответов: 4628
Рейтинг: 749
#4: 2013-10-25 18:29:36 ЛС | профиль | цитата
В конфигурации Apache назначить хендлер файлов tpl на PHP и делать инклюд по include()/include_once()/require()/require_once(). А может будет и без хендлера работать.
карма: 26

0
Ответов: 122
Рейтинг: 2
#5: 2013-10-25 18:46:45 ЛС | профиль | цитата
PHP+HTML "лежит" в строке и при "echo" выдаёт эту строку(PHP+HTML) а мне надо чтобы(напр.) echo(eval($string)) выдавало уже результат php и html в неизменном виде
карма: 0

0
Ответов: 4628
Рейтинг: 749
#6: 2013-10-25 19:14:13 ЛС | профиль | цитата
Как импортируются файлы tpl?
карма: 26

0
Ответов: 122
Рейтинг: 2
#7: 2013-10-26 11:01:32 ЛС | профиль | цитата
главный index.php

<?php
$page = $_GET['p'] ? $page = $_GET['p'] : $page = "main";
include "./ps/loadtpl.php";
getTemplate($page);
?>


loadtpl.php
(предупреждение! тут изрядно накурено!:3)
<?php

function loadTemplate($name) {

(String) $name = file_exists('./tpl/' . $name . '.tpl') ? $name = './tpl/' . $name . '.tpl' : $name = "./tpl/blank.tpl";

$file = fopen($name, "r");

(String) $content = fread($file, filesize($name));

preg_match(str_replace('*','([А-Яа-яЁёa-zA-Z]+)','|{*}|u'), $content, $out);

while ($out[0] != null) {
$content = str_replace($out[0], loadTemplate(substr($out[0], 1, (strlen($out[0]) - 2))), $content);
preg_match('|{([А-Яа-яЁёa-zA-Z]+)}|u', $content, $out);
}

return $content;

fclose($file);

}

function getTemplate($name) {
echo loadTemplate($name);

}

?>
карма: 0

0
Ответов: 498
Рейтинг: 39
#8: 2013-10-26 14:00:02 ЛС | профиль | цитата
Верхний код лучше записать так
code_32156.txt
второй код так
code_32159.txt
лучше использовать готовый шалонизатор, как минимум они быстрее чем такой, например smarty или twig.
------------ Дoбавленo в 12.38:
Шиблонизаторы созданы как замена php в шаблонах, мало смысла их использовать одновременно. Если существует конструкция которую не может шаблнизатор, выполни её в не из шаблона, а в шаблон верни только результат. Используй preg_match_all или preg_replace_callback будет быстрее.
------------ Дoбавленo в 14.00:
Можно сделать так, но такой вариант не хранит переменные между кусками php кода.
#php <?php
preg_replace_callback('/<\?(php|\=|)(.*)\?>/Ui', function($php) {
ob_start();
if($php[1] == '=')
$php[2] = "echo {$php[2]};";
eval($php[2]);
return ob_get_clean();
},$tpl);
пример как можно сделать по другому [url]http://yadi.sk/d/GVR_htdSBbgMx[/url]
карма: 0

1
файлы: 2code_32156.txt [197B] [493], code_32159.txt [543B] [472]
Голосовали:Alex_P
8
Сообщение
...
Прикрепленные файлы
(файлы не залиты)