Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CMS] Szablony - jak przekazywać dane?, dołączanie szablonów, szablon w szablonie, błąd 404
WebCM
post 9.12.2011, 22:04:47
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


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?

Ten post edytował WebCM 9.12.2011, 22:05:20


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
adbacz
post 10.12.2011, 07:33:02
Post #2





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


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.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:21