Jump to content
php.lv forumi

Par mvc kontrolieri


Jackal

Recommended Posts

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by v3rb0
Link to comment
Share on other sites

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 by Jackal
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by v3rb0
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...