[ Stol3x @ 31.07.2013. 13:33 ] @
Pozdrav svima ![]() Imam problem. Imam klasu za template engine koji koristim na sajtu i do sad me sluzio donekle dobro dok nisam poceo koritit loop. Zelim loop izvesti u html fajlu te kroz neki html kod: [loop:list_users] [id] [endloop] recimo ispisat sve ID-ove korisnika u bazi. To radim preko preg_replace tako sto moju varijablu zamjenim svojim kodom, a problem je sto u klasi zamjenjujem kod. Da bi definirao varijablu kao [id] ili [username] moram napraviti $template = new Template; te $template->assign('username',$value'); Posto se unutar klase Template radi obrada varijabli to je nemoguce, renderira varijablu kroz klasu Template samu u sebi.. Evo moj kod: Code: <?php class Template { private $vars = array(); public function assign($key, $value = null){ $this->vars[$key] = $value; } public function render($template_name){ $path = 'templates/default/'.$template_name.'.html'; if(file_exists($path)){ $contents = file_get_contents($path); foreach($this->vars as $key => $value){ $contents = preg_replace('/\['.$key.'\]/', $value, $contents); } $site_theme = 'default'; // HTML funkcije $contents = preg_replace('/\<\!\-\- if (.*) \-\-\>/', '<?php if($1) : ?>', $contents); $contents = preg_replace('/\<\!\-\- else \-\-\>/', '<?php else : ?>', $contents); $contents = preg_replace('/\<\!\-\- endif \-\-\>/', '<?php endif; ?>', $contents); $contents = preg_replace('/\<\!\-\- include:(.*) \-\-\>/', '<?php include "templates/$site_theme/$1"; ?>', $contents); $contents = preg_replace('/\[notif\]/', '', $contents); $contents = preg_replace('/\[login_errors\]/', '', $contents); $contents = preg_replace('/\[join_errors\]/', '', $contents); $contents = preg_replace('/\[err_forgot_pw\]/', '', $contents); $contents = preg_replace('/\<\!\-\- is_logged \-\-\>/', '<?php logged() ? include "templates/'.$site_theme.'/logged.html" : logged(); ?>', $contents); $contents = preg_replace('/\<\!\-\- not_logged \-\-\>/', '<?php logged() ? : include "templates/'.$site_theme.'/unlogged.html"; ?>', $contents); $contents = preg_replace('/\<\!\-\- loop:user_list \-\-\>/', '<?php $user_select = mysql_query("SELECT * FROM users"); while($usr = mysql_fetch_assoc($user_select)): $user_id = $usr[\'id\']; $template->assign("id", $user_id); ?>', $contents); $contents = preg_replace('/\<\!\-\- endloop \-\-\>/', '<?php endwhile; ?>', $contents); // Kraj HTML funkcija // Nije bitno zasto je ovako, al' bitno je da radi, nije bitno zasto radi eval(' ?> '.$contents. ' <?php '); } else { // What if i told you template don't exist? exit('template path ne postoji.'); } } } ?> Do sada sam radio tako da u include.php tj. headeru svake stranice pokrenem klasu, assign-am varijable i renderiram template na kraju. Ovdje tako ne mogu jer je to sve u klasi, ako me razumijete. |