Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [inny][Laravel]zmienna w layouts
damian1
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
lukasz_os
post
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.
Go to the top of the page
+Quote Post
damian1
post
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 }}


Go to the top of the page
+Quote Post
lukasz_os
post
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
Go to the top of the page
+Quote Post
nrm
post
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ń
Go to the top of the page
+Quote Post
damian1
post
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
Go to the top of the page
+Quote Post
memory
post
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
Go to the top of the page
+Quote Post
nrm
post
Post #8





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
damian1
post
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
Go to the top of the page
+Quote Post
memory
post
Post #10





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

Ostrzeżenie: (0%)
-----


  1. BaseController
  2.  
  3. public function __construct()
  4. {
  5. $this->beforeFilter(function()
  6. {
  7. View::share('zm', $zm);
  8. });
  9. }


W widoku możesz się odwołać do zmiennej $zm

Ten post edytował memory 19.09.2014, 20:35:49
Go to the top of the page
+Quote Post
by_ikar
post
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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 11:28