Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CMS] Szablony - jak przekazywać dane?
Forum PHP.pl > Forum > PHP
WebCM
Na początek - jak to wygląda obecnie:

1. Istnieje główny szablon opisujący cały układ strony, czyli <html>, <head>, <body>
2. Główny szablon dołącza szablony modułów (np. newsy, artykuł, komentarze)
3. Można dołączyć dowolną liczbę szablonów (np. artykuł, a potem podsystem komentarzy)

Aktualnie przekazanie danych do szablonu wewnątrz modułu odbywa się tak:
  1. $szablony->plik[] = 'nazwa_pliku';
  2. $szablony->dane += array(
  3. 'artykul' => &$artykul,
  4. 'strony' => &$strony
  5. 'innazmienna' => $innazmienna
  6. );
Wewnątrz index.php dołączanie głównego szablonu:
  1. include $szablony->sciezka('body');
Wszystko działa. Chcę ulepszyć system szablonów, aby kod stał się bardziej przejrzysty, ale bez dodatkowego narzutu czasowego i pamięciowego. Pojawiają się pytania:

1. Czy szablony powinny mieć dostęp do wszystkich danych przekazanych do pola $szablony->dane, czy powinno się przekazywać dane konkretnym szablonom (inne nie miałyby do nich dostępu)?

2. Obecnie główny szablon jest wywoływany w przestrzeni globalnej, czyli ma dostęp do wszystkich zmiennych zadeklarowanych globalnie. Nie przekazuje mu się żadnych danych do obiektu, lecz tworzy zmienne w index.php. Chcę to zmienić. Jakiś pomysł?

3. Trzeba wykryć, kiedy dołączyć szablon modułu, a kiedy wyświetlić szablon błędu 404 "strona nie istnieje". Obecnie w index.php:
  1. (include 'modul.php') or $szablony->ustaw404();
Nietypowe rozwiązanie, ale za to w modułach wystarczy zwykła instrukcja "return" smile.gif A jakie rozwiązanie proponujecie, by ciągle nie pisać $szablony->ustaw404() w modułach?

4. Nie mogę stworzyć takiej listy: główny szablon, szablon modułu 1, szablon modułu 2... bo najpierw dołączy się szablon główny z pustą zawartością, a po zamknięciu </html> pozostałe szablony. Jest na to kilka technik, a jaką polecacie w tym przypadku?

Wcześniej było tak i wszystko działało: http://pastebin.com/6Sx8hLkE
Zacząłem zmiany - obecnie wygląda to tak: http://pastebin.com/cpHDGcTZ

A wtedy moduły przekazują szablonom dane tak - pewnie nie jest to najlepszy pomysł:
  1. $szablony->dodaj('plik_szablonu', array( ... ));

Co zmienić, co ulepszyć, a może zmiany są niepotrzebne, jeśli wszystko działa?
adbacz
Wg mnie, szablony powinny miec dostęp tylko i wyłącznie do zmiennych, które do nich wysyłasz (u Ciebie to $szablony->dane, z tego co zauważyułem). Każdy szablon, bez względu na to czy jest to szablon główny czy tylko wycinek odpowiadający za pokazanie artykułu, powinien mieć dostęp do wszystkich zmiennych/danych, wysyłanych do widoku.

Ale najpierw, zanim cokolwiek będziesz z nimi robił, to postaraj się napisać coś, co będzie Ci sklejało wszystkie szablony w jeden plik html. Sam napisałeś, że Ci skleja ale nie tak jak powinno, czyli kończy sie plik głównego szablony </html> i dopiero masz resztę. Jest na to kilka rozwiązań. Przykłądowe to takie, gdzie na samym początku małych szablonów masz deklarację po którym szablonie większym, ma dziedziczyć mały, i w tedy, w odpowiednim miejscy w większym szablonie go wklejasz - np, pakujesz cały mały szablon do odpowiedniej zmiennej, i wyświetlasz tą zmienną w głownym szablonie.

Radzę popatrzeć jak są zrobione systemy szablonów. Podpatrzeć na rozwiązania tam zastosowane. Np, TWIG jeśli nie za trudne, lub w zwykłym CodeIgniter. Przeglądanie kodu to dobra nauka.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.