(Bardzo) prosty system szablonów

Data dodania:
02 kwietnia 09
Autor:
Łukasz Rutkowski
Kategoria:
(x)HTML, PHP

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');
?>

Wynik

Dziękuję za przeczytanie i życzę powodzenia w dalszej zabawie szablonami!

~Łukasz Rutkowski