PHP-те файлдар негізіндегі қозғалтқыш

Бізге URL-ге байланысты әртүрлі контент қосылатын үлгі файлын жасауға мүмкіндік беретін сайт қозғалтқышын жасаймыз.

Біздің беттің құрылымы келесідей болсын:

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

Контентті енгізу орындалатын жерде біз өзіміз ойлап тапқан кірістіру командасын енгізейік, мысалы: {{ content }}. Сайтымыздың үлгісін өзгертейік:

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

Енді view бумасын жасайық, онда біз контент файлдарын орналастырамыз. Дәл осы бумада немесе ішкі бумаларда.

Бірінші файл келесідей болады:

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

Екінші файл келесідей болады:

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

Үшінші файл келесідей болады:

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

Енді мекенжай жолынан алынған URL бойынша сәйкес файл тартылатындай етейік. Біздің жағдайда /page1 URL бойынша бірінші файл, /dir/page2 URL бойынша - екінші, және /dir/sub/page3 URL бойынша - үшінші болады.

Іске кірісейік. Алдымен .htaccess файлында ресурстар файлдарынан басқа барлық сұралған мекенжайлар index.php бетіне қайта бағытталуы үшін жасайық:

.htaccessRewriteEngine On
RewriteBase /

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

index.php бетінде айнымалыға сұралған URL алайық:

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

Содан кейін үлгі файлының мәтінін алайық:

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

Енді URL бойынша view бумасынан сәйкес контент файлын алайық:

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

Үлгі мәтініндегі біз ойлап тапқан команданы файлдан алынған контентке ауыстырайық:

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

Үлгіге қойылған үлгімен бірге үлгі файлын шолғышта көрсетейік:

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

Барлығын жинап, келесі кодты аламыз:

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

Сипатталған файлдар негізіндегі қозғалтқышты жүзеге асырыңыз.