Pogon na datotekah v PHP

Implementirajmo pogon spletnega mesta, ki nam bo omogočil ustvariti datoteko predloge, ki ji bo glede na URL priključena različna vsebina.

Naj bo struktura naše strani naslednja:

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

Vstavimo na tisto mesto, kjer naj bi prišlo do vstavitve vsebine, neko po naših mislih izmišljeno ukaz za vstavljanje, na primer takšen: {{ content }}. Spremenimo predlogo našega spletnega mesta:

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

Ustvarimo zdaj mapo view, v katero bomo namestili datoteke z vsebino. Neposredno v tej mapi ali v podmapah.

Prva datoteka bo takšna:

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

Druga datoteka bo takšna:

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

Tretja datoteka bo takšna:

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

Naredimo zdaj tako, da se bo glede na URL iz naslovne vrstice priključila ustrezna datoteka. V našem primeru bo po URL /page1 prva datoteka, po URL /dir/page2 - druga, in po URL /dir/sub/page3 - tretja.

Lotimo se izvedbe. Za začetek v datoteki .htaccess naredimo tako, da bodo vsi zahtevani naslovi, razen datotek virov, preusmerjeni na stran index.php:

.htaccessRewriteEngine On
RewriteBase /

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

Na strani index.php pridobimo v spremenljivko zahtevani URL:

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

Nato pridobimo besedilo datoteke s predlogo:

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

Zdaj po URL pridobimo iz mape view ustrezno datoteko z vsebino:

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

Zamenjajmo v besedilu predloge po naših mislih izmišljen ukaz s pridobljeno vsebino iz datoteke:

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

Izpišimo v brskalnik datoteko predloge z vstavljeno predlogo:

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

Zberimo vse skupaj in dobimo naslednjo kodo:

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

Implementirajte opisani pogon na datotekah.