دعوني اشرح المشكلة بالتفاصيل لكين نحل المشكلة
لدي الكلاس التالي (وهو كلاس للبحث عن القوالب)
كود PHP:
<?php
class Template{
var $content= array();
var $vars;
var $tempname;
var $lunix_dir_temp;
function GetTemplate($tempname)
{
$this->tempname = "$tempname";
$get_main_style=mysql_query("SELECT id, main FROM styles WHERE main='1'");
$row_style=mysql_fetch_array($get_main_style);
$get_temp=mysql_query("SELECT name, styleid, template FROM templates WHERE styleid=". $row_style[id] ." AND name='$tempname' ") OR die(echodie());
$row_temp=mysql_fetch_array($get_temp);
$body = $row_temp['template'];
$body = stripslashes($body);
$this->content[$this->tempname] = stripslashes($body);
mysql_free_result($get_main_style);
mysql_free_result($get_temp);
unset($row_style);
unset($row_temp);
unset($body);
}
//Function to FixTemplate the Template Tags
function FixTemplate()
{
$this->lunix_dir_temp=GetCWD();
//start loop
$this->content[$this->tempname] = preg_replace("'<LOOP NAME=\"([A-Za-z0-9_]+)\">'i",
"<? foreach(\$this->vars[\\1] as \$key=>\$var){ ?>",$this->content[$this->tempname]);
//end loop
$this->content[$this->tempname] = preg_replace("'</LOOP>'i","<? } ?>",
$this->content[$this->tempname]);
//Start IF Statement
$this->content[$this->tempname] = preg_replace("'<IF NAME=\"(.+)\">'i",
"<? if(\$this->vars[\\1] == 1){ ?>",$this->content[$this->tempname]);
//end IF Statment
$this->content[$this->tempname] = preg_replace("'</IF>'i","<? } ?>",
$this->content[$this->tempname]);
//Variables
$this->content[$this->tempname] = preg_replace("'{([A-Za-z0-9_/. ]+)}'","<? echo \$this->vars[\\1] ?>",
$this->content[$this->tempname]);
//Include Statement
$this->content[$this->tempname] = preg_replace("'<INCLUDE FILENAME=\"([A-Za-z0-9_/. ]+)\">'i",
"<? include(\"$this->lunix_dir_temp/\\1\"); ?>",$this->content[$this->tempname]);
}
//Function to Display template
function DisplayTemplate()
{
$this->vars = &$GLOBALS;
$this->FixTemplate();
ob_start();
//eval('?'.'>'.trim($this->content[$this->tempname]).'<'.'?');
eval('?'.'>'.trim($this->content[$this->tempname]).'<'.'?');
$this->content[$this->tempname] = ob_get_contents();
ob_end_clean();
print $this->content[$this->tempname];
}
}
?>
الان يقوم الكلاس باستبدال كلمة ما بين {} على اساس انها متغير
مثال يسحول {filename} الى $filename لتكون متغير يعمل في ملفات ال php
وايضا يقوم الكلاس عمل include للملفات الموجودة بداهل <INCLUDE FILENAME="dir/to/file/filename.php">
يستبد هذا النص بالنص التالي include("dir/to/file/filename.php"); لتعمل انكلود للصفحة ولتعمل على ملفات ال php
الان المشكلة في القالب التالي
كود:
<div id="{column_size}">
<INCLUDE FILENAME="{filename}">
</div>
يجب على الكلاس عمل التالي ليعمل بشكل سليم
1) استبدال المتغير
2) ادراج الملف
ولاكن يبدم ان هناك مشكلة في استبدال المتغير {filename} بداخل وسم ال include !!!
لانه لو وضعت مسار حقيقي للملف في القالب بدلا من المتغير {filename} سوف يعمل من غي رمشاكل. يعمل بشكل سليم!!!!
كيف ممكن التعديل على هذا الكلاس ليتم في البداية استبدال المتغيرات حتى وان وجدت داخل وسم الانكلود ومن ثم عمل ادراج للملف؟؟؟؟
وشكرا للاهتمام