Forum Webscript.Ru

Программирование => PHP => Тема начата: stanlee от 02 Июля 2004, 16:19:37

Название: замена include на что то похожее
Отправлено: stanlee от 02 Июля 2004, 16:19:37
ПРива
допустим у нас есть шаблон в котором мы заменяем какой либо место хотя бы с помошью str_replace на другие данные. Так вот мона ли заменить так чтобы вместо данных стравить скрипт
что то типо

$Objects = include("...");
str_replace("Тут был я", $Objects, $template);

????
Название: замена include на что то похожее
Отправлено: hanslinger от 02 Июля 2004, 16:24:59

str_replace(\'тут был кто-то\',\'\',$template);

это если я тебя правильно понял номер раз. а если номер два - то RTFM file_get_contents();
Название: замена include на что то похожее
Отправлено: stanlee от 02 Июля 2004, 16:28:15
не мне именно надо через переменную
чтоб я мог указать разные файлы
Название: замена include на что то похожее
Отправлено: hanslinger от 02 Июля 2004, 16:31:44
А что тебе так мешает указать разные файлы? вместо "..." подставь $file. Или "религия не позволяет"? :)
Название: замена include на что то похожее
Отправлено: stanlee от 02 Июля 2004, 16:37:32
нет не позволяет
т.к.
мне именно надо присвоить все что в файле переменной а потом уже ею заменить место в шаблоне
Название: замена include на что то похожее
Отправлено: hanslinger от 02 Июля 2004, 16:38:27
#$%
Цитировать
RTFM file_get_contents();

[p]file_get_contents[/p]
Название: замена include на что то похожее
Отправлено: stanlee от 02 Июля 2004, 16:47:06
я короче написал

$Objects = file_get_contents("file.php");
str_replace("Тут был я", $Objects, $template);

файл file.php
echo "1111";
?>

и ничего не выводит
Название: замена include на что то похожее
Отправлено: stanlee от 02 Июля 2004, 17:10:44
короче привожу часть кода
$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;
}
Название: замена include на что то похожее
Отправлено: CGVictor от 02 Июля 2004, 17:31:23
[off]
Цитировать
stanlee: eval("echo \\"".$FullTemplate."\\";");

Зачем? Это ж потенциальная дырка! Кто мешает просто так вывести?[/off]
Название: замена include на что то похожее
Отправлено: stanlee от 02 Июля 2004, 17:33:45
Там еще куча подшаблонов и без eval просто не обойтись - вы что думаете - мне так просто захотелось
Название: замена include на что то похожее
Отправлено: Меняздесьдавнонет от 02 Июля 2004, 18:23:23
Цитировать
Там еще куча подшаблонов и без eval просто не обойтись

мы думаем, что ты безмозгло спроектировал свои шаблоны.
Шаблон служит КАК РАЗ для РАЗДЕЛЕНИЯ кода и оформления.
а ты в своих шаблонах их СОЕДИНИЛ и получилось уродство
Название: замена include на что то похожее
Отправлено: CGVictor от 02 Июля 2004, 21:13:01
Цитировать
stanlee:
Там еще куча подшаблонов и без eval просто не обойтись - вы что думаете - мне так просто захотелось

Согласен, первое что приходит в голову - eval. Но сделать им - сделать глупость.

Если хочется в шаблоне указывать вложенные, тогда, как вариант, используй еще один формат своих подстановок (%EXTERNALTEMPLATE FILE=filename или вроде того), чтобы самому открывать их в скрипте и подставлять в шаблон.

Если еще и код хочется - ну, тут уж думай сам. Все от кода зависит.
Название: замена include на что то похожее
Отправлено: stanlee от 05 Июля 2004, 09:09:31
Блин вы все такие простые - мне нужно чтобы в шаблоне и код задействовался а тута без eval мало что получится
да и забейте вы про eval - я же не про то спрашивал

а на мой вопрос так никто и не дал ответа
Название: замена include на что то похожее
Отправлено: stanlee от 05 Июля 2004, 10:25:19
методом проб и ошибок я тута кое что намутил - посмотрим что вы подскажите

скажите пожалуйста почему вы так против eval -?
я не слышал ничего негативного об этой функции
если можно дайте ссылочку почитать что так сильно вас пугает

да и если это дыра - почему ее еще не закрыли - свежая что ли?
Название: замена include на что то похожее
Отправлено: Меняздесьдавнонет от 05 Июля 2004, 12:55:08
ответ, почему нельзя использовать евал - дан.
это дыра, но не в коде, а в голове.
тема закрыта