Forum Webscript.Ru
Программирование => PHP => Тема начата: stanlee от 02 Июля 2004, 16:19:37
-
ПРива
допустим у нас есть шаблон в котором мы заменяем какой либо место хотя бы с помошью str_replace на другие данные. Так вот мона ли заменить так чтобы вместо данных стравить скрипт
что то типо
$Objects = include("...");
str_replace("Тут был я", $Objects, $template);
????
-
str_replace(\'тут был кто-то\',\'\',$template);
это если я тебя правильно понял номер раз. а если номер два - то RTFM file_get_contents();
-
не мне именно надо через переменную
чтоб я мог указать разные файлы
-
А что тебе так мешает указать разные файлы? вместо "..." подставь $file. Или "религия не позволяет"? :)
-
нет не позволяет
т.к.
мне именно надо присвоить все что в файле переменной а потом уже ею заменить место в шаблоне
-
#$%
RTFM file_get_contents();
[p]file_get_contents[/p]
-
я короче написал
$Objects = file_get_contents("file.php");
str_replace("Тут был я", $Objects, $template);
файл file.php
echo "1111";
?>
и ничего не выводит
-
короче привожу часть кода
$template = LoadTemplate($PageArray[\'ModelID\']);
$FullTemplate = $template[\'Template\'];
eval("echo \\"".$FullTemplate."\\";");
function LoadTemplate($PageModelID) {
global $PageID, $template;
$SQL = "SELECT * FROM `models` WHERE `ModelID` = \'".$PageModelID."\';";
$Result = mysql_query($SQL);
$template = mysql_fetch_array($Result);
mysql_free_result($Result);
$template[\'Template\'] = str_replace(\'%Header\', $template[\'Template\'], $template[\'Template\']);
$template[\'CountPlaces\'] = preg_match_all(\'/##place[0-9]+##/\', $template[\'Template\'], $W);
for ($i=0; $i < $template[\'CountPlaces\']; $i++) {
$TemplateWithObjects[] = CountTemplates($PageModelID, $i);
$template[\'Template\']= str_replace("##place".($i+1)."##", "`".$TemplateWithObjects[$i]."`", $template[\'Template\']);
}
return $template;
}
function CountTemplates($PageModelID, $i) {
global $PageID;
$SQL2 = "SELECT RazdelID, TemplateID, ModulID
FROM model_places
WHERE PageID = ".$PageID." AND ModelID = ".$PageModelID." AND PlaceID = ".$i.";";
$Result2 = mysql_query($SQL2);
$PlaceArray = DBResultToArray($Result2);
for ($y=0; $y < count($PlaceArray); $y++) {
if ($PlaceArray[$y][\'TemplateID\']) {
$Objects = CountObjects($PlaceArray[$y][\'RazdelID\']);
} else if ($PlaceArray[$y][\'ModulID\']) {
$SQL = "SELECT IncludeUrl FROM modules WHERE ModuleID = \'".$PlaceArray[$y][\'ModulID\']."\';";
$Result = mysql_query($SQL);
list ($IncludeUrl) = mysql_fetch_row($Result);
mysql_free_result($Result);
$Objects == ????????????????????????????
}
$TemplateWithObjects .= $Objects;
}
return $TemplateWithObjects;
}
-
[off]
stanlee: eval("echo \\"".$FullTemplate."\\";");
Зачем? Это ж потенциальная дырка! Кто мешает просто так вывести?[/off]
-
Там еще куча подшаблонов и без eval просто не обойтись - вы что думаете - мне так просто захотелось
-
Там еще куча подшаблонов и без eval просто не обойтись
мы думаем, что ты безмозгло спроектировал свои шаблоны.
Шаблон служит КАК РАЗ для РАЗДЕЛЕНИЯ кода и оформления.
а ты в своих шаблонах их СОЕДИНИЛ и получилось уродство
-
stanlee:
Там еще куча подшаблонов и без eval просто не обойтись - вы что думаете - мне так просто захотелось
Согласен, первое что приходит в голову - eval. Но сделать им - сделать глупость.
Если хочется в шаблоне указывать вложенные, тогда, как вариант, используй еще один формат своих подстановок (%EXTERNALTEMPLATE FILE=filename или вроде того), чтобы самому открывать их в скрипте и подставлять в шаблон.
Если еще и код хочется - ну, тут уж думай сам. Все от кода зависит.
-
Блин вы все такие простые - мне нужно чтобы в шаблоне и код задействовался а тута без eval мало что получится
да и забейте вы про eval - я же не про то спрашивал
а на мой вопрос так никто и не дал ответа
-
методом проб и ошибок я тута кое что намутил - посмотрим что вы подскажите
скажите пожалуйста почему вы так против eval -?
я не слышал ничего негативного об этой функции
если можно дайте ссылочку почитать что так сильно вас пугает
да и если это дыра - почему ее еще не закрыли - свежая что ли?
-
ответ, почему нельзя использовать евал - дан.
это дыра, но не в коде, а в голове.
тема закрыта