2014-12-18 14 views
12

Sono nuovo a YII2, quindi questa può essere una domanda molto semplice.Yii2 Come dividere il file di layout per separare l'intestazione e il piè di pagina?

Ho impostato l'applicazione iniziale. Ho tema di installazione per la mia YII2 applicazione /themes/standard

ora, c'è un file di layout di default themes/standard/layouts/main.php - Questo ha il codice html per l'intestazione e piè di pagina

voglio separare il codice di intestazione in themes/standard/layouts/header.php e piè di pagina in un altro file

ho provato qualcosa di simile sotto il codice a main.php

<?php $this->render("header"); ?> 

provato anche questo

<?php $this->render("//layouts/header"); ?> 

Ma non rende il contenuto. Non voglio il percorso assoluto poiché ho dei temi Potete aiutare le persone con questo?

+0

Ho provato entrambe le seguenti affermazioni rendering ("// layout/header"); ?> e render ("header"); ?> – Samura

+0

prima di tutto, se si desidera che quelle pagine nei layout non si possa usare la funzione di rendering come render() appartiene a un controller e layout non ha tale cosa. Ma il sito sì. Quindi o modifichi la logica della pagina, o usi semplicemente 'include_once()' o 'require_once()' per risolvere questo problema :) –

+0

Grazie Ares per i tuoi commenti. Si. Ho appena realizzato che il rendering appartiene al Controller. – Samura

risposta

11

Per avere Nested Layouts, è possibile utilizzare beginContent() e endContent() come qui di seguito (nel layout main.php per esempio):

<?php $this->beginContent('@app/views/layouts/header.php'); ?> 
    <!-- You may need to put some content here --> 
<?php $this->endContent(); ?> 

Tutto tra il begin e end sarà sostituito ingegno $content in header.php.


Come esempio ufficiale Yii2 s':

volte può essere utile a nidificare un layout in un altro. Ad esempio, in diverse sezioni di un sito Web, si desidera utilizzare layout diversi, mentre tutti questi layout condividono lo stesso layout di base che genera la struttura della pagina complessiva HTML5. È possibile raggiungere questo obiettivo chiamando beginContent() e endContent() negli schemi bambino come il seguente:

<?php $this->beginContent('@app/views/layouts/base.php'); ?> 

...child layout content here... 

<?php $this->endContent(); ?> 

Come indicato sopra, i contenuti del layout di bambino dovrebbe essere racchiuso all'interno beginContent() e endContent(). Il parametro passato a beginContent() specifica qual è il layout principale. Può essere un file di layout o un alias. Utilizzando l'approccio sopra, è possibile nidificare i layout in più livelli.

http://www.yiiframework.com/doc-2.0/guide-structure-views.html#nested-layouts

+0

Grazie mille. Funziona! – Samura

+0

Fatto. Grazie. A proposito, potrei trovare altre domande di base su Yii2 :) quindi grazie in anticipo .. – Samura

+0

e un'altra domanda: qual è il contenuto di $ in header.php? perché ho appena aggiunto del contenuto hardcode in header.php ed è stato renderizzato, ma non sono sicuro di quella cosa $ content – Samura

Problemi correlati