نظام قوالب جديد من برمجتي
برمجت محرك قوالب بسيط تبعا لدروس استاذي ضيف الله العتيبي واستاذي حازم علي
للسكربتات الصغيرة والحجم صغير جدا 3 كيلو بايت
:
:
الكلاس
كود PHP:
<?php
class template {
var $files = array();
var $vars ;
var $fid ;
var $temp_dir ;
var $cache_dir ;
//Function to load a template file.
//Function to parse the Template Tags
function parse (){
//Foreach Statement
$this -> files [ $this -> fid ] = preg_replace ( "'<LOOP NAME=\"(.+)\">'i" , "<? foreach(\$this->vars[\\1] as \$key=>\$var){ ?>" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ] = preg_replace ( "'</LOOP>'i" , "<? } ?>" , $this -> files [ $this -> fid ]);
//Include Statement
$this -> files [ $this -> fid ] = preg_replace ( "'<INCLUDE FILENAME=\"(.+)\">'i" , "<? include(\"\\1\"); ?>" , $this -> files [ $this -> fid ]);
//Foreach Variables
$this -> files [ $this -> fid ] = preg_replace ( "'{{(.+)}}'" , "<?= \$var[\\1]?>" , $this -> files [ $this -> fid ]);
//Variables
$this -> files [ $this -> fid ] = preg_replace ( "'{(.+)}'" , "<?= \$this->vars[\\1]?>" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ] = preg_replace ( "'<else>'" , "<? else{ ?>" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= preg_replace ( '/\<if condtion\=\"(.*)\\ (.*)\\ (.*)\">/' , '<?if($GLOBALS[$1]$2$3){?>' , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= preg_replace ( '/\<\/if\>/' , '<?}?>' , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ] = preg_replace ( '/(<ELSE>|<ELSE \/>)/i' , '<? }else{ ?>' , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "neq" , "!=" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "eq" , "==" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "neq" , "!=" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "gt" , ">" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "lt" , "<" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "and" , "&&" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "orrrr" , "||" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "not" , "!" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "mod" , "%" , $this -> files [ $this -> fid ]);
}
//Function to OUTPUT
function print_temp ( $filename ) {
$this -> fid = "$this->cache_dir/$filename.php" ;
$this -> files [ $this -> fid ] = file_get_contents ( "$this->temp_dir/$filename" );
$this -> vars = & $GLOBALS ;
$this -> parse ();
$fp = fopen ( $this -> fid , "w" );
fwrite ( $fp , $this -> files [ $this -> fid ]);
fclose ( $fp );
include( $this -> fid );
}
}
?>
طريقة الاستخدام
تعريف الكلاس
كود PHP:
$tpl = new template ;
$tpl -> temp_dir = 'templates' ;
$tpl -> cache_dir = 's' ;
templates هو مجلد القوالب
sهو مجلد الكاش
لطباعة التمبلت
كود PHP:
$tpl -> print_temp ( 'template1.html' );
مع العلم ان template1.html
هو القالب الموجود بملف القوالب
القالب يدعم الاشارة الشرطية التضمين التكرار
ساشرحها لاحقا
اي افكار برمجية للقالب انا جاهز
يجب اعطاء ملف الكلاس التصريح 777
ويجب اعطاء الملف الذي تعرض به القالب التصريح 777
تحياتي
27-07-2008, 08:23 PM
اهلا عزيزي ...
النظام جيد .. وجيد تعني عندي ممتاز ..
لكن هناك شي احببت قوله ..
- في preg_replace تستطيع استخدام مصفوفه بدل ان تقوم باعادتها كذا مره ..
- لما استخدمت الاستبدال العام لكل الملف في دالة str_replace , يعني ان مثلا : يستبدل أي حرفين eq في الملف ...
- دالة str_replace ابطئ من preg_replace قم باستخدام الثانيه ..
- مافائده المتغير $files .. لما تريد ان تحتفظ بالمحتويات حتى بعد ظهور الصفحه وطباعتها .. اعتقد انه لافائده منه .. اكل للذاكره بلا فائده ..
- في النهايه قلت انه يجب ان نعطي مجلد كذا وكذا التصاريح .. لماذا لاتقوم انت بالكلاس بالتأكد وطبع جمله التأكد ..
- لما لا ترجع القيمة .. وتزيل دالة انكلود والكتابه لملف ... لانك تستخدم الكاش كاسم بلافائده ..كما ارى ..
- الكود غير مرتب .. استخدم التاب .. لامانع من ذلك ..
دمت بود
27-07-2008, 09:49 PM
إقتباس:
المشاركة الأصلية بواسطة
saanina اهلا عزيزي ...
النظام جيد .. وجيد تعني عندي ممتاز ..
لكن هناك شي احببت قوله ..
- في preg_replace تستطيع استخدام مصفوفه بدل ان تقوم باعادتها كذا مره ..
- لما استخدمت الاستبدال العام لكل الملف في دالة str_replace , يعني ان مثلا : يستبدل أي حرفين eq في الملف ...
- دالة str_replace ابطئ من preg_replace قم باستخدام الثانيه ..
- مافائده المتغير $files .. لما تريد ان تحتفظ بالمحتويات حتى بعد ظهور الصفحه وطباعتها .. اعتقد انه لافائده منه .. اكل للذاكره بلا فائده ..
- في النهايه قلت انه يجب ان نعطي مجلد كذا وكذا التصاريح .. لماذا لاتقوم انت بالكلاس بالتأكد وطبع جمله التأكد ..
- لما لا ترجع القيمة .. وتزيل دالة انكلود والكتابه لملف ... لانك تستخدم الكاش كاسم بلافائده ..كما ارى ..
- الكود غير مرتب .. استخدم التاب .. لامانع من ذلك ..
دمت بود
يا هلا استذاي sannia
شرفني مرورك بالنسبة للمتغير كنت ناسي
ساحذفه واعدل الموضوع
في preg_replace تستطيع استخدام مصفوفه بدل ان تقوم باعادتها كذا مره ..
لم افهم هذه النقطة
اعذرني اخوك جديد بال OOP
- في النهايه قلت انه يجب ان نعطي مجلد كذا وكذا التصاريح .. لماذا لاتقوم انت بالكلاس بالتأكد وطبع جمله التأكد ..
- لما لا ترجع القيمة .. وتزيل دالة انكلود والكتابه لملف ... لانك تستخدم الكاش كاسم بلافائده ..كما ارى ..
هاذي لم افهم كيف بصراحه ارجو شرحها فانا لا زلت مبتدئ :bad:
27-07-2008, 10:21 PM
اهلين مره ثانيه ..
preg_replace تقبل المصفوفات
زي كذا
كود:
$var = preg_replace(array(..., ..., ...), array(..., ...., ...), $var); ايضا عشان تعرف المجلد ينكتب فيه او لا
كود:
if (!is_writeable($this->cache_dir))
{
....
} اما نقطه الارجاع اقصد كذا ..
كود:
function print_temp ( $filename )
{
...
...
$this -> parse ();
return $this -> fid ;
} ليه ؟ لانك اصلا لاتستحدم الكاش جيدا .. فكل مره تقوم باعادة الكتابه له .. وهذا لايعتبر كاش .. يعتبر دوره لا فائده منها .. إما ان تستخدم الكاش .. او ترجع القيمه والسلام ..
دمت بود
27-07-2008, 10:55 PM
استاذي سانيا استخدمت الكاش ولكن يكتب اذا كان هناك تغييرات
ما رايك
كود PHP:
<?php class template { var $vars ; var $fid ; var $temp_dir ; var $cache_dir ; //Function to load a template file. //Function to parse the Template Tags function parse (){ //Foreach Statement $this -> files [ $this -> fid ] = preg_replace ( "'<LOOP NAME=\"(.+)\">'i" , "<? foreach(\$this->vars[\\1] as \$key=>\$var){ ?>" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ] = preg_replace ( "'</LOOP>'i" , "<? } ?>" , $this -> files [ $this -> fid ]); //Include Statement $this -> files [ $this -> fid ] = preg_replace ( "'<INCLUDE FILENAME=\"(.+)\">'i" , "<? include(\"\\1\"); ?>" , $this -> files [ $this -> fid ]); //Foreach Variables $this -> files [ $this -> fid ] = preg_replace ( "'{{(.+)}}'" , "<?= \$var[\\1]?>" , $this -> files [ $this -> fid ]); //Variables $this -> files [ $this -> fid ] = preg_replace ( "'{(.+)}'" , "<?= \$this->vars[\\1]?>" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ] = preg_replace ( "'<else>'" , "<? else{ ?>" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= preg_replace ( '/\<if condtion\=\"(.*)\\ (.*)\\ (.*)\">/' , '<?if($GLOBALS[$1]$2$3){?>' , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= preg_replace ( '/\<\/if\>/' , '<?}?>' , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ] = preg_replace ( '/(<ELSE>|<ELSE \/>)/i' , '<? }else{ ?>' , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "neq" , "!=" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "eq" , "==" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "neq" , "!=" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "gt" , ">" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "lt" , "<" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "and" , "&&" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "orrrr" , "||" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "not" , "!" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "mod" , "%" , $this -> files [ $this -> fid ]); return $this -> files [ $this -> fid ]; } FUNCTION check_output ( $file ) { if( file_exists ( $file )) { $check = @ fopen ( "$file" , r ); $r = @ fread ( $check , filesize ( "$file" )); @ fclose ( $check ); } return $r ; } //Function to OUTPUT function print_temp ( $filename ) { $this -> fid = "$this->cache_dir/$filename.php" ; $this -> parse (); $this -> files [ $this -> fid ] = file_get_contents ( "$this->temp_dir/$filename" ); $this -> vars = & $GLOBALS ; $this -> parse (); $html = $this -> parse (); $check = $this -> check_output ( $this -> fid ); if( $this -> fid != $this -> files [ $this -> fid ]){ if( $check != $html ) { $fp = fopen ( $this -> fid , "w" ); fwrite ( $fp , $this -> files [ $this -> fid ]); fclose ( $fp ); } } include( $this -> fid ); } } ?>
28-07-2008, 10:25 AM
كنظرة سريعة شغل جميل لكن يوجد عدة ملاحظات
ومن احدى الملاحظات
كود PHP:
$this -> files [ $this -> fid ]= str_replace ( "neq" , "!=" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "eq" , "==" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "neq" , "!=" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "gt" , ">" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "lt" , "<" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "and" , "&&" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "orrrr" , "||" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "not" , "!" , $this -> files [ $this -> fid ]);
$this -> files [ $this -> fid ]= str_replace ( "mod" , "%" , $this -> files [ $this -> fid ]);
اعتقد انه من الافضل ان لا تكون هذه الاستبدالات عامة
28-07-2008, 02:52 PM
Mr.Saphp
شكرا على النصائح استاذي حاولت بان اعملها داخل الاشارة فقط ولكني لم انجح
بالفعل عندما فعلتها عامة واجهت مشكلة وهي خراب التكرار لانس استخدم foreach
فاستبدل الor ب||فوضعتها orrrrrr
شكرا لك استاذي
المعذرة فانا مبتدئ
28-07-2008, 03:54 PM
الان لن تحتاج لتصاريح فسيعطي التصاريح بنفسه
كود PHP:
<?php class template { var $vars ; var $fid ; var $temp_dir ; var $cache_dir ; //Function to load a template file. //Function to parse the Template Tags function parse (){ //Foreach Statement $this -> files [ $this -> fid ] = preg_replace ( "'<LOOP NAME=\"(.+)\">'i" , "<? foreach(\$this->vars[\\1] as \$key=>\$var){ ?>" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ] = preg_replace ( "'</LOOP>'i" , "<? } ?>" , $this -> files [ $this -> fid ]); //Include Statement $this -> files [ $this -> fid ] = preg_replace ( "'<INCLUDE FILENAME=\"(.+)\">'i" , "<? include(\"\\1\"); ?>" , $this -> files [ $this -> fid ]); //Foreach Variables $this -> files [ $this -> fid ] = preg_replace ( "'{{(.+)}}'" , "<?= \$var[\\1]?>" , $this -> files [ $this -> fid ]); //Variables $this -> files [ $this -> fid ] = preg_replace ( "'{(.+)}'" , "<?= \$this->vars[\\1]?>" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ] = preg_replace ( "'<else>'" , "<? else{ ?>" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= preg_replace ( '/\<if condtion\=\"(.*)\\ (.*)\\ (.*)\">/' , '<?if($GLOBALS[$1]$2$3){?>' , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= preg_replace ( '/\<\/if\>/' , '<?}?>' , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ] = preg_replace ( '/(<ELSE>|<ELSE \/>)/i' , '<? }else{ ?>' , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "neq" , "!=" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "eq" , "==" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "neq" , "!=" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "gt" , ">" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "lt" , "<" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "and" , "&&" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "orrrr" , "||" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "not" , "!" , $this -> files [ $this -> fid ]); $this -> files [ $this -> fid ]= str_replace ( "mod" , "%" , $this -> files [ $this -> fid ]); return $this -> files [ $this -> fid ]; } FUNCTION check_output ( $file ) { if( file_exists ( $file )) { $check = @ fopen ( "$file" , r ); $r = @ fread ( $check , filesize ( "$file" )); @ fclose ( $check ); } return $r ; } //Function to OUTPUT function print_temp ( $filename ) { $this -> fid = "$this->cache_dir/$filename.php" ; $this -> parse (); $this -> files [ $this -> fid ] = file_get_contents ( "$this->temp_dir/$filename" ); $this -> vars = & $GLOBALS ; $this -> parse (); if (! is_writeable ( $this -> cache_dir ) ) { $m = @ chmod ( $this -> cache_dir , 0777 ); $m = @ chmod ( 'class.php' , 0777 ); if( $m ){echo "تم" ;} $html = $this -> parse (); $check = $this -> check_output ( $this -> fid ); if( $this -> fid != $this -> files [ $this -> fid ]){ if( $check != $html ) { $fp = fopen ( $this -> fid , "w" ); fwrite ( $fp , $this -> files [ $this -> fid ]); fclose ( $fp ); } } }else{ $html = $this -> parse (); $check = $this -> check_output ( $this -> fid ); if( $this -> fid != $this -> files [ $this -> fid ]){ if( $check != $html ) { $fp = fopen ( $this -> fid , "w" ); fwrite ( $fp , $this -> files [ $this -> fid ]); fclose ( $fp ); } } } include( $this -> fid ); } } ?>
شكرا استاذ saanina
شكرا استاذ Mr.Saphp
آخر تعديل بواسطة exchangeboss في 28-07-2008 الساعة 04:18 PM .
28-07-2008, 04:15 PM