Failu dzinis PHP

Implementēsim vietnes dzinēju, kas ļaus mums izveidot veidnes failu, kuram atkarībā no URL tiks pievienots dažāds saturs.

Pieņemsim, ka mūsu lapas struktūra izskatās šādi:

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

Ievietosim tajā vietā, kur jānotiek satura ievietošanai, kādu mūsu izdomātu komandu ievietošanai, piemēram, šādu: {{ content }}. Mainīsim mūsu vietnes veidni:

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

Izveidosim mapi view, kurā izvietosim satura failus. Tieši šajā mapē vai apakšmapēs.

Pirmais fails būs šāds:

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

Otrais fails būs šāds:

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

Trešais fails būs šāds:

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

Tagad panāksim, lai pēc URL no adreses joslas tiktu ielādēts atbilstošais fails. Mūsu gadījumā pēc URL /page1 būs pirmais fails, pēc URL /dir/page2 - otrais, un pēc URL /dir/sub/page3 - trešais.

Sāksim implementāciju. Vispirms failā .htaccess panāksim, lai visi pieprasītie adresi, izņemot resursu failus, tiek novirzīti uz lapu index.php:

.htaccessRewriteEngine On
RewriteBase /

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

Lapā index.php iegūsim mainīgajā pieprasīto URL:

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

Pēc tam iegūsim veidnes faila tekstu:

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

Tagad pēc URL iegūsim no mapes view atbilstošo satura failu:

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

Aizvietosim veidnes tekstā mūsu izdomāto komandu ar iegūto no faila saturu:

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

Izvadīsim pārlūkprogrammā veidnes failu ar ievietoto saturu:

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

Apvienosim visu kopā un iegūsim šādu kodu:

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

Implementējiet aprakstīto failu dzinēju.