Failidel põhinev mootor PHP-s

Rakendame veebisaidi mootori, mis võimaldab meil luua mallifaili, millesse sõltuvalt URL-ist ühendatakse erinev sisu.

Oletame, et meie lehe struktuur näeb välja järgmine:

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

Paneme kohale, kus peaks toimuma sisu sisestamine, mingi meie poolt väljamõeldud käsuga sisestamiseks, näiteks sellise: {{ content }}. Muudame oma saidi malli:

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

Loome nüüd kausta view, kuhu paigaldame sisufailid. Otse sellesse kausta või alamkaustadesse.

Esimene fail on selline:

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

Teine fail on selline:

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

Kolmas fail on selline:

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

Teeme nüüd nii, et vastav URL aadressiribalt tõmbaks kaasa vastava faili. Meie puhul URL-i /page1 puhul esimene fail, URL-i /dir/page2 puhul - teine, ja URL-i /dir/sub/page3 puhul - kolmas.

Asume rakendamise kallale. Alustuseks failis .htaccess teeme nii, et kõik taotletud aadressid, välja arvatud ressursifailid, suunataks lehele index.php:

.htaccessRewriteEngine On
RewriteBase /

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

Lehel index.php saame muutujasse taotletud URL-i:

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

Seejärel saame malli failist teksti:

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

Nüüd saame URL-i põhjal kaustast view vastava sisufaili:

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

Asendame mallitekstis meie poolt väljamõeldud käsu failist saadud sisuga:

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

Väljastame brauserisse mallifaili asendatud malliga:

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

Kogume kõik kokku ja saame järgmise koodi:

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

Rakendage kirjeldatud failidel põhinev mootor.