php templating con codeigniter

4

Attualmente sto sviluppando un'applicazione di Web site in codeigniter e mi piacerebbe fare qualcosa in PHP / CodeIgniter dove posso creare un modello comune per sezioni separate del sito web. Stavo pensando che avrei mantenuto l'header / footer in un file php separato & includile separatamente.

La cosa di cui non sono sicuro è il contenuto sotto l'intestazione e sopra il piè di pagina. Questa applicazione del sito Web conterrà molte pagine diverse, quindi ho difficoltà a capire come è il modo migliore per farlo.

    
posta JaPerk14 19.05.2013 - 05:34
fonte

4 risposte

3

Generalmente preferisco creare un file di "layout" piuttosto che dover includere sia un'intestazione che un piè di pagina su ogni pagina. È più flessibile.

Ecco uno snippet di uno dei miei progetti:

ob_start();
include '../views/'.$templateFile;
$pageContent = ob_get_clean();
include '../views/layouts/'.$layoutFile;

Tutto ciò che devi fare è abilitare il buffering dell'output, includere il template, quindi chiamare ob_get_clean() per catturare il contenuto del template e inserirlo in una variabile. Una volta inserito in una variabile, puoi includere il file di layout principale, che dovrebbe contenere $pageLayout da qualche parte all'interno.

per es.,

<html>
<head>
    <title>Your Site</title>
</head>
<body>
    <!-- header here -->
    <?= $pageContents ?>
    <!-- footer here -->
</body>
</html>

Detto questo, sicuramente Code Igniter ha una specie di modello incorporato, no? Non mi è familiare. Modifica: Apparentemente non . Tipo di sciocco davvero; con il caching, il costo delle prestazioni di un bel motore di template è trascurabile.

    
risposta data 19.05.2013 - 05:48
fonte
1

Puoi utilizzare Hook o dare il parametro in ogni tuo metodo. Esempio:

Class My_controller extends CI_Controller{

    public function index(){
        $data = array(
            'container' => 'contain'
        );

        $this->load->view('base_view', $data);
    }

}

e dai anche il tuo base_view.php (come vista principale) al valore della variabile inviata.

<html>
<head>
    <title>Your title here</title>
</head>
<body>
    <header></header>

    <section id="container">
        <?php $this->load->view($container); ?>
    </section>

    <footer></footer>
</body>

Spero che ti aiuti ..

    
risposta data 28.06.2013 - 04:18
fonte
1

Qualcosa che uso la maggior parte del tempo, sono solo tre (o più) viste nel controller, come questo:

class Mycontroller extends CI_Controller {
    public function index() {
        $headerData['title'] = 'Title of the page';
        $yourData['content'] = 'Everything you want to do inside your controller';

        $this->load->view('template/header',$headerData);
        $this->load->view('template/page',$yourData);
        $this->load->view('template/footer');
    }
}

In questo modo puoi anche impostare, ad esempio, un titolo nel tuo file di intestazione.

modifica: puoi estenderlo con, ad esempio, le visualizzazioni di menu o qualcosa per mantenere le cose ancora più separate. Assicurati di caricare le viste nell'ordine corretto.

    
risposta data 28.06.2013 - 17:24
fonte
0

Ho sempre usato i sistemi con CodeIgniter e questa libreria di template: link

È molto semplice da usare e può fare un lavoro migliore rispetto alle tue tecniche usate come l'uso del solo $ this- > load- > view () metodo.

    
risposta data 28.06.2013 - 16:48
fonte

Leggi altre domande sui tag