Początkujący programiści PHP popełniają podstawowy błąd, który utrudnia im przyszłą modyfikację wyglądu strony. Mieszają oni kod PHP z kodem (x)HTML w taki sposób, że jeżeli ktoś chce coś zmienić w wyglądzie, wymaga to wielkiego skupienia i dużego nakładu pracy, gdyż np. kod (x)HTML jest porozbijany na części, pomiędzy którymi odstęp wynosi nawet kilkaset linii. Spróbuję dzisiaj Wam zaprezentować bardzo prosty sposób, w jaki można to uprościć. Przy mało zaawansowanych projektach bardzo pomaga, a w przyszłości można sobie go rozbudować o system cache’u, czy inne uduskonalenia.
Nasz kod oprzemy na klasie, która będzie miała zablokowany konstruktor, a wszystkie operacje będziemy wykonywać na zmiennych statycznych za pomocą funkcji(również statycznych). Jego rolą będzie gromadzenie wartości(zmiennych) dla szablonu, który potem załadujemy. Kod tej klasy będzie się prezentował tak:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | define('FILE_SEPARATOR', PHP_OS == 'WINNT' ? '\\' : '/'); class Style { static private $zmienne; //Blokada tworzenia obiektu tej klasy protected function __construct() { } //Dodawanie zmiennej do tablicy public static function dZmienna($nazwa, $wartosc) { self::$zmienne[$nazwa] = $wartosc; } //Ładowanie pliku ze stylem public static function laduj($plik) { include('phtml' . FILE_SEPARATOR . $plik . '.phtml'); } } |
Uwaga! W kodzie znajduje się stała FILE_SEPARATOR, która przybiera wartość \ lub / w zależności od systemu operacyjnego serwera.
Wszystkie wartości przechowujemy w tablicy, która jest niedostępna spoza klasy. Szablony ładujemy do klasy, więc dostęp do nich nie będzie problemem. W miejscu, gdzie zapisaliśmy tę klasę musimy utworzyć katalog phtml, w którym dla testu stworzymy plik index.phtml o treści:
1 2 | <h2>Nagłówek drugiego stopnia</h2> <p>Działa? <?php echo self::$zmienne['dziala'] ?></p> |
Również mieszamy kod PHP z (x)HTML, lecz odbywa się to w dużo mniejszym stopniu. Do zmiennych, które dodajemy przez metodę dZmienna odwołujemy się poprzez formułkę
self::$zmienne['nazwa']
Zabierzmy się do pisania pliku, który wszystko to połączy w całość. Nazwijmy go index.php.
Uwaga! W poniższym kodzie zakładam, że klasa została zapisana w pliku style.php, w tym samym folderze, co index.php.
Musimy zacząć od wczytania do niego pliku z klasą:
require_once('style.php');
Potem dodajemy do tablicy przykładową zmienną:
Style::dZmienna('dziala', 'TAK!');
Na sam koniec wczytujemy pożądany plik szablonu(nie podajemy końcówki .phtml):
Style::laduj('index');
Cały kod pliku index.php:
1 2 3 4 5 | <?php require_once('style.php'); Style::dZmienna('dziala', 'TAK!'); Style::laduj('index'); ?> |
Nasz skrypt jest gotowy. Możemy go wypróbować. Prawidłowym wynikiem dla jego działania powinno być to: wynik.
Nasz system sobie również radzi z tablicami. Przykład kodu szablonu, który wykorzystuje tablicę:
1 2 3 4 5 | <ul> <?php foreach(self::$zmienne['pMenu'] as $pole): ?> <li><a href="<?php echo $pole['cel'] ?>"><?php echo $pole['nazwa'] ?></a></li> <?php endforeach; ?> </ul> |
Oraz zawartość pliku index.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php require_once('style.php'); $pMenu = array( array( 'cel' => '#1', 'nazwa' => 'Kotwica pierwsza' ), array( 'cel' => '#2', 'nazwa' => 'Kotwica druga' ) ); Style::dZmienna('pMenu', $pMenu); Style::laduj('index'); ?> |
Dziękuję za przeczytanie i życzę powodzenia w dalszej zabawie szablonami!
[...] tutaj na prostym systemie szablonów, który już opisałem. Jeżeli korzystasz z specyficznego, to już Tobie pozostawiam przerobienie powyższego [...]
Ale to żaden system szablonów. I tak w “szablonie” jest kod php, a tylko więcej pracy dochodzi.
Systemem szablonów jest, lecz, jak już wspomniałem, bardzo prostym. Szablony są oddzielone od głównego kodu aplikacji. Jestem przeciwnikiem pseudo języków kodowania w szablonach, więc i takie jest to zrobione.
[...] z użyciem systemem szablonów praktycznie identycznym, jak ten z mojego artykułu pod tytułem “(Bardzo) prosty system szablonów”. Różnicą w obydwu aplikacjach jest typ zastosowanej bazy danych, gdyż w Zendzie oparłem się [...]