Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Gestire il layout con Code Igniter

    (k.b sò che tu utilizzi code igniter e tu sei uno dei pochi mi puoi dare un suggerimento/indirizzo)
    Sto iniziando ad utilizzare il framework code igniter e lo trovo molto semplice da utilizzare.

    Tuttavia data la mia esperienza minima con l'MVC mi sorgono dei dubbi per la gestione del layout. Non mi interessa il "farlo funzionare" (su questo nn ho problemi) sono piuttosto interessato alle best pratices.

    Immagginiamo che un sito sia "scomponibile" in: header - content - sidebar - footer (una cosa tradizionale insomma...).

    In questi casi le parti comuni a tutte le pagine del sito possono avere degli elementi dinamici.

    Ad esempio potrei avere una sidebar che viene richiamata in tutte le pagine con il medesimo contenuto dinamico.
    /view/sidebar.php
    Codice PHP:
    <ul>
    <?php foreach($siti_amici as $amici) : ?>
        [*]
            <?php anchor$amici['url'], $amici['anchor_text'] ); ?>
        
    <?php endforeach; ?>[/list]
    Nel controller avrò pertanto
    Codice PHP:
    <?php
    class Page extends CI_Controller {

        public function 
    index(){    
            
    $data = array();
            
            
    // etc etc ...
            
            
    $this->load->model('siti_amici_model');
            
    $data['siti_amici'] = $this->siti_amici_model->GetSitiAmici();
            
            
    // etc etc ...
            
            
    $this->load->view('siti_amici'$data);
            
            
    // etc etc ... 
            
    }
        }
    Essendo che questa sidebar è presente in tutte le pagine questo approccio mi costringerebbe a istanziare in tutti i controller-function il model siti_amici_model ed il metodo GetSitiAmici().

    Ripetere sempre lo stesso codice in linea di principio non è corretto: allora come si opera?

    Io avrei una mezza idea ma la cosa non mi convince per nulla...
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  2. #2
    up... un'esperto che mi risponde per favore...
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  3. #3
    devo dire che il manuale fa schifo di codeigniter... cmq nel wiki ho trovato questo:

    http://codeigniter.com/wiki/layout_library/

    quindi tu puoi fare il tuo layout e richiamare le parti comuni nella classe layout e il resto lasciarlo alla view...
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Se dei dati sono necessari in ogni pagina gestita da uno specifico controller, puoi mettere il codice che li estrae/elabora nel costruttore del controller (o metodo equivalente, in Kohana ad esempio c'e' il metodo before()) e salvarli in una proprieta' di classe, cosi' poi quando crei la view devi solo assegnare quella variabile senza chiamare il model.

    Se non ricordo male - e' un bel po' che non uso piu' CI - c'era anche un modo per registrare delle variabili per ogni view, pero' comunque era la versione vecchia di CI quindi non saprei.

  5. #5
    Ah si eccolo:

    $this->load->vars($array)

    This function takes an associative array as input and generates variables using the PHP extract function. This function produces the same result as using the second parameter of the $this->load->view() function above. The reason you might want to use this function independently is if you would like to set some global variables in the constructor of your controller and have them become available in any view file loaded from any function. You can have multiple calls to this function. The data get cached and merged into one array for conversion to variables.
    http://codeigniter.com/user_guide/libraries/loader.html

  6. #6
    Anzitutto grazie immensamente per le risposte.

    Originariamente inviato da k.b
    Se dei dati sono necessari in ogni pagina gestita da uno specifico controller, puoi mettere il codice che li estrae/elabora nel costruttore
    Bhè... sarebbe stato relativamente semplice e "pulito".
    Il fatto sta che le parti comuni possono essere richiamate anche da diversi Controller.

    Vi dico una soluzione che avevo pensato (ma nn provato) così mi dite cosa ne pensate.

    Creo un controller per le parti comuni e nel costruttore richiamando tutti i model necessari vado a inserire nell'array $this->data tutto quel che occorre per le view.
    Codice PHP:
    Class Parti_comuni_layout extends CI_Controller 
        
        protected 
    $data = array();
        
        public function 
    __construct(){     
            
    $this->load->model('siti_amici_model'); 
            
    $this->data['siti_amici'] = $this->siti_amici_model->GetSitiAmici(); 
            
    // etc etc per tutte le parti comuni
            

        } 
    Ora tutti i controller che necessitano delle "parti comuni" invece di estenderli in modo "classico" da CI_Controller li estendo da Parti_comuni_layout così da ereditare $this->data con tutti i suoi valori.

    Codice PHP:
    Class Page extends Parti_comuni_layout{
         public function 
    index(){
            
    // $this->data contiene tutto ciò che mi serve...
            
    $this->data['altro'] = 'altra roba che mi serve nella view';
            
             
    $this->load->view('siti_amici'$this->data); 
            }
        } 
    $this->load->vars($array)
    Me la studio...
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  7. #7
    Se le informazioni servono a piu' controller, allora la soluzione che hai pensato mi sembra perfettamente appropriata nonche' corretta nella logica OO

  8. #8
    Io preferirei la soluzione via layout...cmq, l'idea di estendere il controller personalizzato è valida
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    Originariamente inviato da k.b
    Se le informazioni servono a piu' controller, allora la soluzione che hai pensato mi sembra perfettamente appropriata nonche' corretta nella logica OO
    Originariamente inviato da Santino83_02
    Io preferirei la soluzione via layout...cmq, l'idea di estendere il controller personalizzato è valida
    Essendo ancora in fase di "smanettamento" ( ) i vostri commenti mi hanno quasi sorpreso...

    Il link che mi ha dato Santino mi ha un pà dato fastidio vedere classi scritte in php4 style...
    Codice PHP:
    class Layout
    {
        
        var 
    $obj;
        var 
    $layout;
    //...


    Ma sicuramente sarà "vittima" anche lui dei miei smanettamenti

    Tenetevi caldi perchè prima o poi in questi giorni a venire aprirò sicuramente un nuovo topic per qualche altro dubbio...
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  10. #10
    si vabbeh la gente che ancora scrive var $variabile non si può leggere... si vede che quello stava facendo una classe "cake-style", cakephp + ancora scritto tutto così

    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.