2014-12-18 7 views
12

Jestem nowy w YII2, więc to może być bardzo podstawowe pytanie.Yii2 Jak podzielić plik układu na osobny nagłówek i stopkę?

Skonfigurowałem początkową aplikację. Mam konfiguracji motywu dla mojego YII2 aplikacji /themes/standard

Teraz jest domyślny plik układ themes/standard/layouts/main.php - To ma kod HTML nagłówka i stopki

Chcę oddzielić kod nagłówka do themes/standard/layouts/header.php i stopki do innego pliku

próbowałem coś jak poniżej kod w main.php

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

próbował tego jak dobrze

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

Ale nie wyświetla treści. Nie chcę absolutnej ścieżki, ponieważ mam motywy. Czy możesz pomóc tym osobom?

+0

Próbowałem oba poniższe stwierdzenia render ("// układy/header"); ?> i render ("nagłówek"); ?> – Samura

+0

Po pierwsze, jeśli chcesz te strony w układach, nie możesz użyć funkcji renderowania jako render() należy do kontrolera, a układy nie mają takich rzeczy. Ale strona ma. Więc albo zmieniasz logikę strony, albo po prostu używasz 'include_once()' lub 'require_once()', aby rozwiązać ten problem :) –

+0

Dzięki Ares za twoje komentarze. Tak. Właśnie zdałem sobie sprawę, że render należy do kontrolera. – Samura

Odpowiedz

11

W celu uzyskania Nested Layouts, można użyć beginContent() i endContent() jak poniżej (w układzie main.php na przykład):

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

Wszystko pomiędzy begin i end zostaną zastąpione wit $content w header.php.


Począwszy od oficjalnej przykład Yii2 „s:

Czasami chcesz gniazdo jednego układu w innej. Na przykład w różnych sekcjach witryny sieci Web chcesz używać różnych układów, podczas gdy wszystkie te układy mają ten sam podstawowy układ, który generuje ogólną strukturę strony HTML5. Można to osiągnąć poprzez wywołanie beginContent() i endContent() w układach dziecka jak poniżej:

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

...child layout content here... 

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

Jak przedstawiono powyżej, treść układ dziecko powinno być zamknięte w beginContent() i endContent(). Parametr przekazany do beginContent() określa, jaki jest układ nadrzędny. Może to być plik układu lub alias. Korzystając z powyższego podejścia, można zagnieździć układy na więcej niż jednym poziomie.

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

+0

Wielkie dzięki. To działa! – Samura

+0

Gotowe. Dzięki. Przy okazji, mogę wymyślić bardziej podstawowe pytania na Yii2 :) więc dzięki z góry .. – Samura

+0

i jeszcze jedno pytanie: co to jest $ content w header.php? ponieważ właśnie dodałem zawartość hardcode do pliku header.php i została ona wyrenderowana, ale nie jestem pewna co do tego treści o treści $ – Samura