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:
<!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:
<!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:
<div>
content 1
</div>
Druga datoteka bo takšna:
<div>
content 2
</div>
Tretja datoteka bo takšna:
<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:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
Na strani index.php pridobimo v spremenljivko
zahtevani URL:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Nato pridobimo besedilo datoteke s predlogo:
<?php
$layout = file_get_contents('layout.php');
?>
Zdaj po URL pridobimo iz mape view
ustrezno datoteko z vsebino:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Zamenjajmo v besedilu predloge po naših mislih izmišljen ukaz s pridobljeno vsebino iz datoteke:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Izpišimo v brskalnik datoteko predloge z vstavljeno predlogo:
<?php
echo $layout;
?>
Zberimo vse skupaj in dobimo naslednjo kodo:
<?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;
?>
Implementirajte opisani pogon na datotekah.