كود PHP:
<?php
/*#############################################*/
/*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
// كائن التعامل مع القوالب //
//تمت البرمجة بواسطة حازم علي ,www.egyplus.org //
/*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
/*########################################*/
/*
| معلومات هذا الملف
| 20/8/2008 تم إنشائه في تاريخ
| 21/8/2008 اخر تعديل في تاريخ
*/
/*
كائن التعامل استبدال قيم الاكواد في ملفات الي القالب الي شفرات بي اتش بي
*/
class code_output{
protected $templateFolder = 'styles'; // اسم مجلد القوالب
public $contents ; // متغير يحمل المحتوي
protected function __variable($var){
$output = str_replace('.','"]["',$var[1]);
return '<?= $GLOBALS["'.$output.'"]; ?>' ;
}
protected function __StaticVariable($var){
$output = str_replace('.','"]["',$var[1]);
return '$GLOBALS["'.$output.'"]' ;
}
protected function __InnerVariable($var){
$output = str_replace('.','"]["',$var[1]);
return '<? echo $'.$output.'; ?>' ;
}
protected function __if($var){
$output = str_replace('eq','==',$var[1]);
$output = preg_replace_callback('#{([a-zA-Z0-9\_\.\$]+)}#',array('code_output','__StaticVariable'),$output);
return "<?if($output){?>" ;
}
protected function __elseif($var){
$output = str_replace('eq','==',$var[1]);
$output = preg_replace_callback('#{([a-zA-Z0-9\_\.\$]+)}#',array('code_output','__StaticVariable'),$output);
return "<?}elseif($output){?>" ;
}
protected function __loop($var){
$output = str_replace('eq','==',$var[1]);
$output = preg_replace_callback('#{([a-zA-Z0-9\_\.\$]+)}#',array('code_output','__StaticVariable'),$output);
return '<?$GLOBALS[i] = 0;foreach('.$output.' as $GLOBALS["key"]=>$GLOBALS["value"]){++$GLOBALS[i];?>' ;
}
protected function __loop_value($var){
$output = str_replace('eq','==',$var[1]);
$output = preg_replace_callback('#{([a-zA-Z0-9\_\.\$]+)}#',array('code_output','__StaticVariable'),$output);
return '<?$GLOBALS[i] = 0;foreach('.$output.' as $GLOBALS["key"]=>$GLOBALS[\''.$var[2].'\']){++$GLOBALS[i];?>' ;
}
protected function __eval($var){
$output = preg_replace_callback('#([a-zA-Z0-9\_\.\$]+)#',array('code_output','__StaticVariable'),$var[1]);
return '<?$this->fetch_eval('.$output.');?>' ;
}
protected function incode(){
$text = $this->contents ;
$text = preg_replace_callback('#<if condition="(.*)">#',array('code_output','__if'),$text);
$text = preg_replace_callback('#<elseif condition="(.*)">#',array('code_output','__elseif'),$text);
$text = preg_replace('#(<else>|<else />)#','<?}else{?>',$text);
$text = preg_replace('#\<include file\=\"(.*)\"\>#','<?$this->print_output("$1");?>',$text);
$text = preg_replace('#\<eval code\=\"(.*)\"\>#','<?$this->fetch_eval($1);?>',$text);
$text = preg_replace_callback('#<loop for="(.*)" value="(.*)">#',array('code_output','__loop_value'),$text);
$text = preg_replace_callback('#<loop for="(.*)">#',array('code_output','__loop'),$text);
$text = preg_replace('#(</if>|</loop>)#','<?}?>',$text);
$text = preg_replace_callback('#fetch\_eval\(([a-zA-Z0-9\_\.]+)\)#',array('code_output','__eval'),$text);
$text = preg_replace_callback('#{([a-zA-Z0-9\_\.\$]+)}#',array('code_output','__variable'),$text);
$text = preg_replace_callback('#\(\_([a-zA-Z0-9\_\.\$]+)\)#',array('code_output','__InnerVariable'),$text);
return $text;
}
}
// كائن إخراج ملف الكائن ضمن سياق العمل ككود بي اتش بي
class template_engine extends code_output
{
public function __construct($templateinfo,$folder,$dir='.'){
$this->templateFolder = $dir.'/'.$templateinfo["template_folder"].'/'.$folder;
unset($templateinfo);
}
private function __loadString($template){
$path = $this->templateFolder .'/'. $template ;
if(!file_exists($path))
exit("$path لم يتم العثور علي القالب");
return file_get_contents($path);
}
public function print_output($template){
global $block;
$path = $this->cacheFolder .'/'. $template ;
$this->contents = $this->__loadString($template);
$HTML = $this->incode();
eval("?>".$HTML."<?");
}
public function return_output($template){
global $block;
$path = $this->cacheFolder .'/'. $template ;
$this->contents = $this->__loadString($template);
$HTML = $this->incode();
return $HTML;
}
public function fetch_eval($tpl){
eval("?>".$tpl."<?");
}
}
?>