Motor në skedarë në PHP

Do të implementojmë një motor website-i, i cili do të na lejojë të krijojmë një skedar shablloni, tek i cili në varësi të URL do të lidhet përmbajtje e ndryshme.

Le të supozojmë që struktura e faqes sonë duket si në vijim:

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

Tani, në atë vend ku duhet të bëhet futurja e përmbajtjes le të vendosim ndonjë komandë të imagjinuar nga ne për futje, për shembull si kjo: {{ content }}. Le të ndryshojmë shabllonin e website-it tonë:

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

Tani le të krijojmë dosjen view, në të cilën do të vendosim skedarët e përmbajtjes. Drejtpërdrejt në këtë dosje ose në nëndosje.

Skedari i parë do të jetë i tillë:

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

Skedari i dytë do të jetë i tillë:

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

Skedari i tretë do të jetë i tillë:

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

Tani le të bëjmë që sipas URL në shiritin e adresave të tërhiqet skedari përkatës Në rastin tonë, përmes url /page1 do të jetë skedari i parë, përmes url /dir/page2 - i dyti, dhe përmes url /dir/sub/page3 - i treti.

Le të fillojmë implementimin. Fillimisht në skedarin .htaccess le të bëjmë që të gjitha adresat e kërkuara, përveç skedarëve të burimeve, të ridrejtohen në faqen index.php:

.htaccessRewriteEngine On
RewriteBase /

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

Në faqen index.php do të marrim në një variabël URL-në e kërkuar:

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

Pastaj do të marrim tekstin e skedarit me shabllonin:

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

Tani përmes URL do të marrim nga dosja view skedarin përkatës të përmbajtjes:

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

Le të zëvendësojmë në tekstin e shabllonit komandën e imagjinuar nga ne me përmbajtjen e marrë nga skedari:

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

Le të shfaqim në shfletues skedarin e shabllonit me shabllonin e vendosur:

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

Le të mbledhim të gjitha së bashku dhe do të marrim kodin e mëposhtëm:

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

Implementoni motorin e përshkruar në skedarë.