Search the Community
Showing results for tags 'template'.
-
Aiz gara laika strādāju pie Template klases (iesācēja līmenis, tāpēc STFU!). Būtu labi, ja iekš php templates varetu ielādēt kontrolierus (jā, paštaisīta +/- MVC sistēma, turas kopā uz puņķiem, bet taisu savu, jo mācos), tāpēc domāju par funkciju iekš šīs klases, lai viņus varētu izsaukt! Tad tā php template varētu izskatīties šādi: <?php $this->css(); ?> <table> <tr> <td> <?php $this->panel('members/stats'); ?> </td> </tr> <tr> <td> <?php $this->panel('applikacija/iespeja/arguments/arguments'); ?> </td> </tr> </table> Kontrolieri iekš tempaltes tiek izsaukti ar URI līdzīgu stringu, laikam tā to nosaukt. Tik tālu viss ok. Bet, ja iekš katra kontroliera ir funkcija, kas pievieno piemēram css, tad tas $this->css() nevarētu uzģenerēt css includes, jo paneļi tiek izsaukti pēc $this->css()! Tad tālāk rīkojos tā, ka tā panel funkcija nevis atgriež kontroliera saturu, bet atstāj aiz sevis "pirkstu nospiedumu!" Tā vietā tiks ielikts kontroliera saturs! Arī funkcija css() aiz sevis atstās pirkstu nospiedumu, kur tad vajadzētu saģenerēt tās css inkludes. Izskatās aptuveni šādi: function panel($name) { $this->panels[] = $name; echo '\'.$panel_'.$name.'.\''; } echo '\'.$panel_'.$name.'.\''; tiek izmantots tāpēc, ka tālāk ar eval palīdzību tiks palaists tempalte saturs! Piemēram: function tpl() { ob_start(); include 'tpl.php'; $tpl = ob_get_clean(); foreach($this->panels as $p) { ${'panel_'.$p} = $p(); } eval('echo \''.$tpl.'\';'); } Viss strādā, tiek atstāti pirkstu nospiedumi, piereģistrēti css faili un viss salitks pa vietām izmantojot šādu tpl struktūru. Bet es nezinu cik tas viss ir efektīvi un droši. Izmantot str_replace un piemēram {SIDE_PANEL} nevēlos kaut kā, jo tas str_replace darboajs abos virzienos un viņš var pārdefinēt kko vēlreiz, piemēram, ja jau iepriekš aizstātā {SIDE_PANEL} ir piemēram saturs, kurā ir arī šāda paša tipa apzīmējums {...} Tad sanāk, ka Tur ir lieki str_replace. Man arī patīk labāk iekš tempalte izmantot piemēram <?php $this->panel('members/stats'); ?> nevis {SIDE_PANEL} un tad iekš kāda kontroliera definēt, kas tad būs tas sānu panelis. Šādi viss notiek +/- pa "tiešo"! Rīkojos šādi, jo tā liekas viss ērtāk. Nezinu cik resursietilpīgi un atjautīgi tas ir. Varbūt ir kāds labāks piemērs, ka šādā manierē to var paveikt? Strādājošs piemērs: template.zip