poniedziałek,
PHP: Prosty system szablonów
Projektowanie prostego systemu szablonów w PHP z możliwością kompilacji i wstawienia zmiennych wymaga trochę więcej pracy, ale jest to dobre ćwiczenie w celu zrozumienia, jak działają bardziej zaawansowane systemy szablonów. Prezentowany niezbyt złożony system szablonów jest elastyczny i można go rozwijać, dodając więcej funkcjonalności, jak np. obsługę pętli czy warunków, a także ulepszyć obsługę błędów i wydajność. W kolejnym materiale „PHP: Udoskonalony system szablonów” możesz poznać sposób na rozwinięcie prezentowanego przykładu.
Implementacja
Struktura katalogów
Utwórz prostą strukturę katalogów:
/szablony
/class
Template.php
/templates
template.php
Tworzenie klasy obsługi szablonów
Stwórz plik PHP, który będzie zawierał klasę szablonu. Ta klasa będzie odpowiedzialna za ładowanie szablonu i wstawianie do niego zmiennych.
Klasa Template.php
class Template {
protected $template;
protected $variables = array();
public function __construct($template) {
$this->template = $template;
}
public function set($key, $value) {
$this->variables[$key] = $value;
}
public function render() {
if(file_exists($this->template)) {
$content = file_get_contents($this->template);
foreach($this->variables as $key => $value) {
$content = preg_replace('/{' . $key . '}/', $value, $content);
}
return $content;
}
return "";
}
}
Tworzenie przykładowgo szablonu
W katalogu /templates
utwórz plik szablonu, który będzie zawierał znaczniki zmiennych do zamiany.
Plik template.php
<html>
<head>
<title>{title}</title>
</head>
<body>
<h1>{headline}</h1>
<p>{content}</p>
</body>
</html>
Używanie systemu szablonów
Teraz możesz użyć klasy Template
do generowania stron z dynamicznymi danymi.
Plik index.php
W głównym katalogu projektu utwórz plik index.php.
include 'class/Template.php';
$template = new Template('templates/template.php');
$template->set('title', 'Moja strona');
$template->set('headline', 'Witaj na mojej stronie');
$template->set('content', 'To jest przykładowa zawartość strony.');
echo $template->render();
Jak to działa?
- Klasa Template – zawiera metody pozwalające na odczyt plik szablonu oraz ustawienie zmiennych i ich wartości, a także na renderowanie szablonu poprzez zastąpienie znaczników zmiennych odpowiednimi wartościami.
- Wstawianie zmiennych – użycie wyrażeń regularnych (regex) do wyszukiwania i zastępowania znaczników zmiennych w szablonie ich odpowiednimi wartościami.
- Renderowanie szablonu – metoda
render
klasyTemplate
zastępuje wszystkie znaczniki w szablonie odpowiednimi wartościami i zwraca gotową treść do wyświetlenia.