![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 23.04.2014 Ostrzeżenie: (0%) ![]() ![]() |
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. Ten post edytował damian1 19.09.2014, 17:42:42 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 203 Pomógł: 55 Dołączył: 23.11.2008 Skąd: UKF Ostrzeżenie: (0%) ![]() ![]() |
Napisz dokładnie co chcesz zrobić. Jak rozplanowałeś te szablony.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 23.04.2014 Ostrzeżenie: (0%) ![]() ![]() |
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 }} |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 203 Pomógł: 55 Dołączył: 23.11.2008 Skąd: UKF Ostrzeżenie: (0%) ![]() ![]() |
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 Ten post edytował lukasz_os 19.09.2014, 18:33:40 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
- 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ń |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 23.04.2014 Ostrzeżenie: (0%) ![]() ![]() |
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? Ten post edytował damian1 19.09.2014, 19:21:29 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 616 Pomógł: 84 Dołączył: 29.11.2006 Skąd: bełchatów Ostrzeżenie: (0%) ![]() ![]() |
Tak są , od czego masz controller albo filtry ?
http://laravel.com/docs/controllers Ten post edytował memory 19.09.2014, 19:30:09 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 23.04.2014 Ostrzeżenie: (0%) ![]() ![]() |
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. Ten post edytował damian1 19.09.2014, 20:17:10 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 616 Pomógł: 84 Dołączył: 29.11.2006 Skąd: bełchatów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
@nrm już ci napisał jak możesz to rozwiązać. View composer jest idealny do tego: http://laravel.com/docs/responses#view-composers
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 11:28 |