PHP-də fayl motoru

Bizə URL-dən asılı olaraq müxtəlif kontentin qoşulacağı şablon faylı yaratmağa imkan verəcək veb sayt motorunu həyata keçirək.

Tutaq ki, səhifəmizin quruluşu aşağıdakı kimi görünür:

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

Gəlin kontentin əlavə edilməli olduğu yerdə, bizim tərəfimizdən uydurulmuş hər hansı bir əmr əlavə edək, məsələn, belə: {{ content }}. Veb saytımızın şablonunu dəyişək:

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

İndi isə kontent fayllarını yerləşdirəcəyimiz view qovluğunu yaradaq. Birbaşa bu qovluqda və ya alt qovluqlarda.

İlk fayl belə olacaq:

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

İkinci fayl belə olacaq:

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

Üçüncü fayl belə olacaq:

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

Gəlin indi edək ki, ünvan sətirindən gələn URL-ə uyğun fayl gətirilsin. Bizim vəziyyətimizdə /page1 URL-inə birinci fayl, /dir/page2 URL-inə ikinci fayl, /dir/sub/page3 URL-inə isə üçüncü fayl uyğun gəlsin.

Həyata keçirməyə başlayaq. Əvvəlcə .htaccess faylında edək ki, resurs faylları istisna olmaqla, bütün sorğu göndərilən ünvanlar index.php səhifəsinə yönləndirilsin:

.htaccessRewriteEngine On
RewriteBase /

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

index.php səhifəsində dəyişənə sorğu göndərilən URL-i əldə edək:

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

Sonra şablon faylının mətnini əldə edək:

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

İndi isə URL-ə uyğun olaraq view qovluğundan uyğun kontent faylını əldə edək:

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

Şablon mətnində bizim tərəfimizdən uydurulmuş əmrı fayldan əldə edilmiş kontentlə əvəz edək:

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

Brauzerə əlavə edilmiş kontentli şablon faylını çıxaraq:

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

Hamısını birlikdə yığaq və aşağıdakı kodu əldə edək:

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

Təsvir edilmiş fayl motorunu həyata keçirin.