damian1
19.09.2014, 16:54:53
Nie za bardzo wiem, gdzie umieścić instrukcje warunkową, że jeśli wybrałem layouts.default to dołącz mi do niego zmienną $zmienna, a w przypadku innych layoutów zmiennej nie dołączaj (albo jeśli myślę źle, to jak to zrobić inaczej?)
Mógłbym to zrobić w samym layoucie (widoku), ale musiałbym pisać w znacznikach php, a to z pewnością nie jest oddzielenie warstwy logicznej.
Mógłbym to też zrobić w każdym kontrolerze z osobna, ale trochę dużo ich mam i trochę by zeszło.
Innej możliwości na razie nie znam i właśnie dlatego piszę ten post.
albo ogólnie jak dołączyć zmienią do layoutu, bo w sumie w samym layoucie można już sprawdzić czy zmienna istnieje.
lukasz_os
19.09.2014, 18:01:13
Napisz dokładnie co chcesz zrobić. Jak rozplanowałeś te szablony.
damian1
19.09.2014, 18:19:22
Mam szablony
layouts.default , layouts.sidebar (z dodatkowym menu), layouts.page (indywidualny i inny od reszty).
I teraz mam mnóstwo stron wykorzystujących różne layouty (home, contact, login...).
Te strony są oczywiście w rożnych kontrolerach, które mają jeszcze sporawo akcji.
I teraz chciałem w headerze strony umieścić losowe zdjęcia. Skrypt już mam i działa, gdy go umieszczę między znacznikami php w layouts.default i layouts.sidebar, ale tak się chyba nie robi (chyba, że się robi?)
Generalnie w powyższych layoutach wolałbym się odwołać do zmiennej {{ $losowe-zdjecia }}
lukasz_os
19.09.2014, 18:32:38
Zabierasz się do tego od .... strony że tak powiem.
Zrób sobie jeden szablon główny - master - w nim podstawowe deklaracje takie jak częściowo sekcja head i podstawowa konstrukcja body(header, footer) - to co jest stałe...
Rzeczy które się zmieniają opakuj w sekcje. Pamiętaj że sekcje, które masz zdefiniowane w szablonie głównym nie muszą być koniecznie załączane w pliku widoku. Przede wszystkim możesz zrobić sobie sekcje na title, keywords+description,dodatkowe pliki css czy js, content.
Teraz przejdziemy do content. Pamiętaj że każdy widok może dołączać subwidoki. Więc jak masz kilka rodzajów sidebar dla różnych szablonów to przypisz mu nazwę widoku do zmiennej np. $sidebar => 'sidebars.menu' a w sekcji content w miejscu sidebaru dodaj @include($sidebar).
Poczytaj dokładnie o templatkach blade.
Edit - literówki
- tak, tak sie nie robi.
- lukasz dobrze napisał, no może poza tym, że zamiast includowac po prostu dziedziczysz (@yield @extends @section)
- a czasami warto też użyć view composer do takich zastosowań
damian1
19.09.2014, 19:19:01
ehh trochę nie zrozumienia
tzn. faktycznie layouts.default layouts.sidebar można połączyć i korzystać z sekcji (zmienię to), natomiast resztę mam już poprawną i w poszczególnych stronach (home, contact) używam @extends @section @yield, a w samym layout.default używam @include.
Potrzebuje by każda strona (home, contact) poszerzona o konkretny layout.default (w którym znajduje się już <header>logotekst<img ... /><img ... /></header>)
miała, w tym headerze losowo wybrane zdjęcia. I teraz w layoucie.default mam umieszczony skrypt przed znacznikiem <html> przeglądający dany katalog i losujący to zdjęcie. Skrypt jest bezpośrednio miedzy znacznikami <?php ... ?> i po prostu nie wiem czy tak można? Do tej pory w layoucie używałem znaczników html lub {{ HTML::link('....') }} i mam wrażenie, że taki skrypt powinien być napisany nie wiem gdzie, ale nie w layoucie. Mam wrażenie, że layoucie powinienem odebrać tylko zmienna wynikową w stylu <img src="{{ $zmienna }}" />. Ewentualnie rozpakować ją jeśli jest w tablicy (@foreach). Tylko co zrobić i jak przesłać ta zmienną?
Po prostu czy w pliku layouts.default mogę używać znaczników <?php ?> i pisać skryptu ogólnie potrzebne?
Czy są na to jakieś inne metody?
memory
19.09.2014, 19:27:18
Tak są , od czego masz controller albo filtry ?
http://laravel.com/docs/controllers
Cytat(damian1 @ 19.09.2014, 19:19:01 )

Po prostu czy w pliku layouts.default mogę używać znaczników <?php ?> i pisać skryptu ogólnie potrzebne?
nie.
damian1
19.09.2014, 20:13:30
Tzn. kontrolerów używam, ale w przypadku konkretnych stron return View::make('controllerkatalog.contact').
Rozumiem w takim razie, że do layoutu też mogę się odwołać tak View::make('layouts.default').
Tylko, w którym miejscu powinienem napisać tą funkcję, by wykonywała się, gdy zostanie wybrany dany layouts?
Muszę dodawać ją do wszystkich akcji jakie mam w 10 kontrolerach?
Gdzie mógłbym wstawić kod w stylu
if($layouts == layouts.default) { wykonaj skrypt i View::make('layouts.default')->with('zm', '$zm')}
albo już nawet bez wybory layoutu. Po prostu by skrypt wykonał się przy każdej stronie i nie musiałbym go umieszczać w każdej akcji osobno.
memory
19.09.2014, 20:34:49
BaseController
public function __construct()
{
$this->beforeFilter(function()
{
View::share('zm', $zm);
});
}
W widoku możesz się odwołać do zmiennej $zm
by_ikar
19.09.2014, 21:41:31
@nrm już ci napisał jak możesz to rozwiązać. View composer jest idealny do tego:
http://laravel.com/docs/responses#view-composers
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.