Przejdź do treści

Centrum Kształcenia Zawodowego i Ustawicznego w Mrągowie

PHP: Udoskonalony system szablonów

środa,

PHP: Udoskonalony system szablonów

Ten materiał to rozwinięcie projektu „PHP: Prosty system szablonów” o obsługę pętli i tablic. Nowe funkcjonalności znacznie poszerzają możliwości prezentowanego prostego systemu szablonów. Nazwy plików i ich rozmieszczenie nie uległy zmianie w stosunku do poprzedniego materiału.

Modyfikacja systemu szablonów

Zmiany w klasie Template

Aby dodać obsługę pętli i tablic do prostego systemu szablonów w PHP, musisz rozszerzyć klasę Template o dodatkową funkcjonalność. To zadanie wymaga bardziej zaawansowanego używania wyrażeń regularnych i zrozumienia, jak manipulować ciągami znaków w PHP. Poniżej znajdziesz przykładową implementację:

class Template {
    // poprzedni kod
    protected $template;
    protected $variables = array();

    public function __construct($template) {
        $this->template = $template;
    }

    public function set($key, $value) {
        $this->variables[$key] = $value;
    }
    // end poprzedni kod

    // modyfikacja metody render

    public function render() {
        if(file_exists($this->template)) {
            $content = file_get_contents($this->template);

            // Obsługa zmiennych
            foreach($this->variables as $key => $value) {
                if(is_array($value)) {
                    // Obsługa pętli
                    $content = $this->handleLoops($content, $key, $value);
                } else {
                    // Zastąpienie zmiennych
                    $content = preg_replace('/{' . $key . '}/', $value, $content);
                }
            }

            return $content;
        }
        return "";
    }

    // end modyfikacja metody render

    // nowy kod
    private function handleLoops($content, $key, $array) {
        // Wyszukiwanie wzorca pętli dla określonej zmiennej
        $pattern = "/{% for $key %}(.*?){% endfor %}/s";
        if(preg_match($pattern, $content, $matches)) {
            $loopContent = '';

            foreach($array as $item) {
                // Wypełnianie treści pętli
                $itemContent = $matches[1];
                foreach($item as $itemKey => $itemValue) {
                    $itemContent = preg_replace('/{' . $itemKey . '}/', $itemValue, $itemContent);
                }
                $loopContent .= $itemContent;
            }

            // Zastąpienie całego bloku pętli wygenerowaną treścią
            $content = preg_replace($pattern, $loopContent, $content);
        }

        return $content;
    }
    // end nowy kod
}

Przykładowy szablon z pętlą

Teraz w szablonie możesz użyć specjalnej składni do obsługi pętli.

Plik template.php:

<html>
<head>
    <title>{title}</title>
</head>
<body>
    <h1>{headline}</h1>
    <p>{content}</p>

    {% for users %}
        <p>Name: {name}, Age: {age}</p>
    {% endfor %}
</body>
</html>

Przykład zastosowania zmodyfikowanego systemu szablonów

Możesz teraz przekazać tablicę z danymi do szablonu, pętla będzie przetwarzana automatycznie.

Plik index.php:

include 'class/Template.php';

$users = [
    ['name' => 'Jan', 'age' => 30],
    ['name' => 'Anna', 'age' => 25],
    // Więcej użytkowników...
];

$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.');
$template->set('users', $users);

echo $template->render();

Jak to działa?

  1. Obsługa pętli – metoda handleLoops przeszukuje treść szablonu w poszukiwaniu wzorców pętli i wypełnia je danymi z tablicy.
  2. Dynamiczne zastępowanie – wewnątrz pętli, każdy element tablicy jest przetwarzany oddzielnie, pozwalając na dynamiczne zastępowanie zmiennych wewnątrz pętli.
  3. Składnia pętli – w szablonie używa się specjalnej składni {% for variable %} ... {% endfor %} do określenia pętli.

Ta prosta implementacja pozwala na stosowanie pętli w szablonach, co jest znacznym krokiem w kierunku bardziej dynamicznego i elastycznego systemu. Oczywiście bardziej zaawansowane są istniejące popularne systemy szablonów, które oferują szerszą gamę funkcjonalności, lepsze zarządzanie błędami itd., jednak własna implementacja pozwala zrozumieć zasadę działania takich rozwiązań.

Artykuł: Harmonogram egzaminów maturalnych

Harmonogram egzaminów maturalnych

Artykuł: Staże w Hiszpanii

Staże w Hiszpanii

Artykuł: Conformité Européenne

Conformité Européenne

Artykuł: Display Stream Compression

Display Stream Compression

Artykuł: High Dynamic Range

High Dynamic Range

Nasze technikum

Technik informatyk

Szkoły dla dorosłych

Nasza szkoła

Pełna oferta edukacyjna

Oferta szkoły