Jackal Posted March 7, 2011 Report Share Posted March 7, 2011 Piemēram, ir jaunumu kontrolieris class news extends controller{ public function show(){ //parādam jaunumu sarakstu $this->template->assign('script', 'js/news.js'); } public function description(){ //parādam vienu konkrētu jaunumu $this->template->assign('script', 'js/news.js'); } } Ir gadijumi, kad vajag iekļaut kādu specifisku .js failu, kurš vajadzīgs tikai jaunumiem. Kā labāk šo failu iekļaut, lai tas nebūtu jādara katrā metodē atsevisķi. Ir doma, ka varētu katrā kontrolierī izveidot metodi "auto", kas tiek ielādēta automatiski izsaucot kontrolieri. Problēma jau nav tikai ar js failiem. Var gadīties, ka jaunumus vajag atgriezt kādā specifiskā konteinerī (div tagā, kas ir kopīgs gan jaunumu sarakstam, gan sīkākam aprakstam). Kā labāk risināt šo problēmu? Quote Link to comment Share on other sites More sharing options...
wintermute Posted March 7, 2011 Report Share Posted March 7, 2011 Es tur redzu divus kaut cik pieņemamus variantus. 1. Attiektieks no plika Template objekta. Tas kā tu noformē jaunumu sarakstu un kādus JS tu iekļauj ir "display logic", un ar to parasti nodarbojas View clases pbjekts, kurš var izmantot vairākus templeitus un mainīt to saturu atkarībā no tā, kādi dati View ir atsūtīti. 2. Pamainīt pieeju Controller palaišanai : public function execute(){ $controller = new { $this->controller_name }( $this->request ); $controller->{ $this->action_name }( $this->params ); } // AIZSTĀT AR public function execute(){ $controller = new { $this->controller_name }( $this->request ); $controller->before( $this->params , $this->action_name ); $controller->{ $this->action_name }( $this->params ); $controller->after( $this->params , $this->action_name ); } Tad to vari News controllierī pārdefinēr before() funkciju , kas pamaina templeitu. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted March 7, 2011 Report Share Posted March 7, 2011 Kāds "framework's"? =] function __construct() { parent::__construct(); // Whatever... =] } Quote Link to comment Share on other sites More sharing options...
v3rb0 Posted March 7, 2011 Report Share Posted March 7, 2011 (edited) hm.. js inclūdes aprakstīt kontrolleros tagad skaitās labais tonis? es vēl pa vecam, templeitam vajadzīgās js inclūdes aprakstu pašā templeitā [un automātiski mēģinu inclūdot js vārdā <controller>_<action>.js] Edited March 7, 2011 by v3rb0 Quote Link to comment Share on other sites More sharing options...
Jackal Posted March 7, 2011 Author Report Share Posted March 7, 2011 (edited) Nezinu vai tas ir labais tonis vai sliktais, bet es neredzu citu iespēju kā iekļaut tikai to, kas konkrētajam kontrolierim vajadzīgs. Var jau iekļaut templeitā, bet man patīk visu sabāzt iekš head taga. Iekš head taga tad man arī stāv: <?php foreach($this->get('script') as $script): ?> <script type="text/javascript" src="<?php echo $this->get('js') . $script; ?>"></script> <?php endforeach; ?> wintermute, vari varbūt pastāstīt sīkāk ko tu domāji ar pirmo punktu? Edited March 7, 2011 by Jackal Quote Link to comment Share on other sites More sharing options...
wintermute Posted March 7, 2011 Report Share Posted March 7, 2011 JS vispār nebūtu jābūt iekš <head> , bet gan tieši pirms aizverošā </body>. Tad viss, ko tu tajā failā izsauc, jau automātiski 'notiek' onDOMready event'ā. Hmm ... v3rb0 variants arī it tīri ok, tikai var sanākt daudzi JS faili ar vienādu saturu, ja nepareizi sataisa. P.S. templeits ir pēc idejas diezgan statisks pasākums, daudz vienkāršāk ir ierakstīt ar roku , kurā templeitā tev kuri JS'i tiek lādēti , nevis izmantot mistiskas get('js') un get('css') funkcijas. Quote Link to comment Share on other sites More sharing options...
v3rb0 Posted March 7, 2011 Report Share Posted March 7, 2011 (edited) nav jau iekš head taga jābāž. templeitā norādi kādus js vajag, renderējot templeitu vispirms dabū vajadzīgo js inclūžu sarakstu, tālāk izvadi headeri (vai layoutu) un saturu. idejiski. news_show templeitā: <?php $javascript[] = 'js/news.js'; ?> header templeitā: <?php print_r($javascript); ?>.. tur kur renderē templeitu: $javascript = array(); ob_start(); include path/to/template; $t = ob_get_clean(); incldue path/to/header echo $t; Edited March 7, 2011 by v3rb0 Quote Link to comment Share on other sites More sharing options...
wintermute Posted March 7, 2011 Report Share Posted March 7, 2011 Reku labs piemērs kā template klasi cept : http://codeangel.org/articles/simple-php-template-engine.html Quote Link to comment Share on other sites More sharing options...
Jackal Posted March 7, 2011 Author Report Share Posted March 7, 2011 Paldies! Par tādu extract funkciju nemaz nezināju. Mans template objekts jau strādā diezgan līdzīgi tik bez maģiskajam metodēm un extract. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.