Fájlalapú motor PHP-ben

Megvalósítunk egy webmotor, amely lehetővé teszi számunkra, hogy készítsünk egy sablonfájlt, amelyhez az URL-től függően különböző tartalom csatlakozik.

Tegyük fel, hogy oldalunk szerkezete a következő képen néz ki:

layout.php<!DOCTYPE html>
<html>
  <head>
    <title>title</title>
  </head>
  <body>
    <header>
      header
    </header>
    <main>
      content
    </main>
    <header>
      footer
    </header>
  </body>
</html>

Helyezzünk el arra a helyre, ahol a tartalom beillesztésének kell történnie, egy általunk kitalált parancsot a beillesztésre, például ezt: {{ content }}. Módosítsuk webhelyünk sablonját:

layout.php<!DOCTYPE html>
<html>
  <head>
    <title>title</title>
  </head>
  <body>
    <header>
      header
    </header>
    <main>
      {{ content }}
    </main>
    <header>
      footer
    </header>
  </body>
</html>

Most készítsünk egy view mappát, amelybe elhelyezzük a tartalomfájlokat. Akár ebben a mappában, akár almappákban.

Az első fájl a következő lesz:

view/page1.php<div>
  content 1
</div>

A második fájl a következő lesz:

view/dir/page2.php<div>
  content 2
</div>

A harmadik fájl a következő lesz:

view/dir/sub/page3.php<div>
  content 3
</div>

Most állítsuk be úgy, hogy a címsorból érkező URL alapján a megfelelő fájl töltődjön be. Esetünkben a /page1 URL-re az első fájl, a /dir/page2 URL-re a második, és a /dir/sub/page3 URL-re a harmadik.

Kezdjük el a megvalósítást. Először a .htaccess fájlban állítsuk be, hogy az összes lekérdezett cím, az erőforrásfájlok kivételével, a index.php oldalra irányuljon:

.htaccessRewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php

A index.php oldalon egy változóba fogadjuk a lekérdezett URL-t:

index.php<?php
  $url = $_SERVER['REQUEST_URI'];
?>

Ezután megkapjuk a sablonfájl szövegét:

index.php<?php
  $layout = file_get_contents('layout.php');
?>

Most az URL alapján a view mappából nyerjük ki a megfelelő tartalomfájlt:

index.php<?php
  $content = file_get_contents('view' . $url . '.php');
?>

Cseréljük le a sablon szövegében az általunk kitalált parancsot a fájlból kapott tartalomra:

index.php<?php
  $layout = str_replace('{{ content }}', $content, $layout);
?>

Jelenítsük meg a böngészőben a sablonfájlt a beillesztett tartalommal:

index.php<?php
  echo $layout;
?>

Gyűjtsük össze az egészet, és a következő kódot kapjuk:

index.php<?php
  $url = $_SERVER['REQUEST_URI'];
  
  $layout  = file_get_contents('layout.php');
  $content = file_get_contents('view' . $url . '.php');
  
  $layout = str_replace('{{ content }}', $content, $layout);
  
  echo $layout;
?>
Задание 1

Valósítsa meg az ismertetett fájlalapú motort.