آموزش کلاس Template 1 , 2 بازديد ها:
8901 , پاسخ ها:
22 bluefox عزيز لطف كد ها رو در تگ
کد: انتخاب همه [code] [/code]بذار تا خوانا باشند
[ تبليغات ] سیستم تبلیغات تصویری سیستم تبلیغات تصویری من خیلی با این روش کیف نمی کنم چون به نظر من کلا بعد که بخواهیم داخل برنامه سیستم مدیریت تمپلیت بنویسیم خیلی سخت می شود به نظر من بهتره تمپلیت داخل دیتابیس ذخیره بشود و از اونجا فراخوانی بهشه و یک سیستم cashe خیلی ساده هم می تواند برای کم کردن تعداد کوئری کافی باشه.
کاملا موافقم
حتی میشه بعد از این که process کردیم اونو cache کنیم که بهتر هم بشه، که البته phpbb3 همین کارو میکنه البته با فایل.
بچه ها دست به کار شین.
نظر من هم دقیقا همین هست یعنی بعد از این که پردازش انجام شد cashe کنیم و حالا می تونیم یک سیستم هم برای clear داشته باشیم علاوه بر آن می توانیم شرط و حلقه و... را هم در سیستم تعریف کنیم مثلا برای شرط می تونیم از
کد: انتخاب همه {if $login ==1} Welcome , user {else} You need to login? {/if}استفاده کنیم
فکر می کنم یک کلاس ساده می تونه این کار را انجام بدهد من یک سری کد نوشتم ولی خوب هنوز روی cache کار نکرردهم البته وقت هم نشد.
ولی اگر وقت شد و تمام شد قرارش می دهم.
mojtaba نوشته: کاملا موافقم
حتي ميشه بعد از اين که process کرديم اونو cache کنيم که بهتر هم بشه، که البته phpbb3 همين کارو ميکنه البته با فايل.
بچه ها دست به کار شين.
با كش كردن شديدا موافقم
Smarty يك انجين خيلي قوي داره ، فرصت كنم حتما يك دور كاملش تجزيه تحليلش مي كنم تا بتونم يك كلاس حرفه اي براي كش كردنش هم بنويسم.
مجتبي جان بابت قالب ممنون ولي 2 كار مهم مونده :
1.سي اس اس رو يكم ويرايش كن مثلا يكاري كن اين كدهاي وقتي خيلي پر عرض هستند صفحه بزرگ نشه
2.تشكر رو مجددا نصب كن :دي
کد: انتخاب همه class Template{ private $variable = array();private $tag = array(); private $tpl=""; private $base_tpl = ""; function __construct($templatefile = ''){ if((!file_exists($templatefile))and($templatefile=='')){ print 'Error in load template <i>'. $templatefile ."</i>!\n"; return false; } $this->base_tpl=(file_exists($templatefile)) ? implode("",(file($templatefile))) : $templatefile; return true; } function Add_Variable($input, $value = ''){ if(is_array($input))foreach($input as $tag => $value)$this->variable[$tag] = $value; if(is_string($input)) $this->variable[$input] = $value; } function Add_Tag($block_name, $block_array=array()){$this->tag[$block_name][]= $block_array;} private function Parse_If($tpl,$variable,$erase=false){ foreach($variable as $key=>$value) if (preg_match("/<IF:$key>(.*)<\/IF:$key>/sUi",$tpl))$tpl=str_replace(array("<IF:$key>","</IF:$key>"),array("",""),$tpl); if ($erase==true)preg_match_all("/<IF:(.*)>/sUi",$tpl,$emtyif); if (isset($emtyif[1]) && is_array($emtyif[1]))foreach($emtyif[1] as $iferr)$tpl=preg_replace("/<IF:$iferr>.*<\/IF:$iferr>/sUi","",$tpl); return $tpl; } private function Parse_Tag(){ foreach($this->tag as $tag_name => $tag_var){ $tmp=array();preg_match_all("/<Tag:$tag_name>(.*)<\/Tag:$tag_name>/sUi",$this->tpl,$all_tag); foreach($tag_var as $tag_row){ if(isset($all_tag[1]))foreach($all_tag[1] as $kk=>$tag_text){ foreach($tag_row as $key=>$value)$tag_text=str_replace("#-$key-#",$value,$tag_text); $tmp[1][$kk]=(isset($tmp[1][$kk]))? $tmp[1][$kk].$this->Parse_If($tag_text,$tag_row,false) : $this->Parse_If($tag_text,$tag_row,false); $tmp[0][$kk]=$all_tag[0][$kk]; } } if(isset($tmp[0]))$this->tpl=str_replace($tmp[0],$tmp[1],$this->tpl); } preg_match_all("/<Tag:(.*)>/sUi",$this->tpl,$emtytag); if (isset($emtytag[1]) && is_array($emtytag[1]))foreach($emtytag[1] as $tagerr)$this->tpl=preg_replace("/<Tag:$tagerr>.*<\/Tag:$tagerr>/sUi","",$this->tpl); } private function Parse_Variable(){ foreach($this->variable as $key=>$value)$this->tpl=str_replace("#-$key-#",$value,$this->tpl); $this->tpl=preg_replace("/#-.*-#/i","",$this->tpl); } function Parse_Template(){ $this->tpl=$this->base_tpl; $this->Parse_Tag(); $this->tpl=$this->Parse_If($this->tpl,$this->variable,true); $this->Parse_Variable(); $this->tpl=(@func_get_arg(0)==true) ? $this->tpl : preg_replace("/<\?.*\?>/isU","",$this->tpl); return $this->tpl; } function Run(){eval(" ?>".$this->Parse_Template(true)."<?php ");} }تگها مجدا يه کوچولو تغيير کردن :
کد: انتخاب همه <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>#-title-#</title> </head> <body> <IF:if1> شرط صحيح </IF:if1> <Tag:tage1> Tage1 #-Num-#<br /> </Tag:tage1> اجراي دستورات php در صورت استفاده از تابع Run() <?php print time() ;?> <Tag:tage1> NewTage1 #-Num-#<br /> </Tag:tage1> </body> </html>براي اجرا :
کد: انتخاب همه <?php $MyThm=new Template('newtheme.html'); $MyThm->Add_Variable("title","عنوان صفحه"); $MyThm->Add_Tag("tage1",array("Num"=>time())); print $MyThm->Run(); ?>سلام بچه ها
اگه ميشه يكم راهنمايي كنيد كه چه طوري بايد كدهاي قالب را به جاي اينكه توي يه فايل قرار داد آنها را در ديتا بيس ذخيره كرد و مورد استفاده قرار داد ؟
خيلي بهش نياز دارم ممنون ميشم كمك كنيد
bluefox نوشته: کد: انتخاب همه <IF:if1> شرط صحيح </IF:if1>من يک مشکل توي استفاده از اين کد ها دارم، اونم توي شرط هست!!! چطوري بايد از شرط استفاده کرد؟ يعني چطور مي شه شرط رو True يا False کرد؟ يا يه جورايي مقدار شرط رو بررسي کرد؟
من می خوام توی قالب هایی که طراحی می کنن یکسری کد رو فیلتر کنم (مثل کدهای php که یکسری تگ های خواص داره مثل این : <?php و ?> و یا اینکه تمامی متن هایی که بین این دو تا تگ هستن رو حذف کنم!!
یه روز داشتم به یک سیستم وبلاگدهی نفوذ می کردم، وقتی شلرم رو توی سیستمش آپ کردم (سیستم آپلود سنترش رو دور زدم) وقتی قالب می خواست لود بشه (شلر از طریق قالب لود می شد) شلر من باز می شد اما کد هاش همه حذف شده بودن، با یه ترفند شلر رو گرفتم دیدم فقط دوتا تگ بیشتر نداره اون تگ هام اینا هستن (<?php ?>) از شلر 100 کیلو بایتی من فقط همینش باقی مونده بود!!!!
خیلی دوست دارم یاد بگیرم چطور این کار انجام می شه
از اساتید محترم خواهش می کنم جواب من رو بدن (تشکر از همتون ...)
1 , 2