Motor basado en archivos en PHP
Implementaremos un motor de sitio que nos permitirá crear un archivo de plantilla, al cual dependiendo de la URL se le conectará contenido variado.
Dejemos que la estructura de nuestra página se vea de la siguiente manera:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Pongamos en el lugar en el que debe ocurrir
la inserción de contenido algún comando inventado
por nosotros para la inserción, por ejemplo así:
{{ content }}. Cambiemos la plantilla de nuestro sitio:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Hagamos ahora la carpeta view, en la cual
colocaremos los archivos de contenido. Directamente en esta
carpeta o en subcarpetas.
El primer archivo será así:
<div>
content 1
</div>
El segundo archivo será así:
<div>
content 2
</div>
El tercer archivo será así:
<div>
content 3
</div>
Hagamos ahora que según la URL
de la barra de direcciones se cargue el archivo
correspondiente. En nuestro caso, por la URL /page1
será el primer archivo, por la URL /dir/page2
- el segundo, y por la URL /dir/sub/page3
- el tercero.
Empecemos con la implementación. Primero en el archivo
.htaccess hagamos que todas las direcciones solicitadas,
excepto los archivos de recursos, se redirijan
a la página index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
En la página index.php obtendremos en una variable
la URL solicitada:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Luego obtendremos el texto del archivo con la plantilla:
<?php
$layout = file_get_contents('layout.php');
?>
Ahora por la URL obtendremos de la carpeta view
el archivo de contenido correspondiente:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Reemplacemos en el texto de la plantilla nuestro comando inventado por el contenido obtenido del archivo:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Mostremos en el navegador el archivo de plantilla con la plantilla insertada:
<?php
echo $layout;
?>
Juntemos todo y obtendremos el siguiente código:
<?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;
?>
Implemente el motor basado en archivos descrito.