Фајл-базирани систем у 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-а из адресне траке добави одговарајући фајл. У нашем случају, за URL /page1 то ће бити први фајл, за URL /dir/page2 - други, а за URL /dir/sub/page3 - трећи.

Приступимо имплементацији. За почетак у фајлу .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

Имплементирајте описани фајл-базирани систем.