Motor basado en base de datos en PHP
Ahora creemos un motor de sitio web en el cual el contenido de las páginas no se almacenará en archivos, sino en una base de datos. Supongamos que tenemos la siguiente tabla en la base de datos:
| id | title | content |
|---|---|---|
| 1 | title1 | <div> content1 </div> |
| 2 | title2 | <div> content2 </div> |
| 3 | title3 | <div> content3 </div> |
Supongamos que queremos obtener nuestras páginas mediante
URLs como /page/1, donde el número
representará el id de la página
que queremos obtener.
Comencemos con la implementación. Primero, en un archivo separado establezcamos la conexión a la base de datos y conectemos este archivo al nuestro:
<?php
$link = require 'connect.php';
?>
Obtengamos la URL solicitada:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Usando una expresión regular dividamos la URL en partes:
<?php
preg_match('#/page/(\d+)#', $url, $match);
?>
Guardemos el id del grupo capturado en una variable:
<?php
$id = $match[1];
?>
Ejecutemos una consulta a la base de datos, obteniendo
la página solicitada por id:
<?php
$query = "SELECT * FROM pages WHERE id=$id";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
$page = mysqli_fetch_assoc($res);
?>
Obtengamos el archivo de plantilla:
<?php
$layout = file_get_contents('layout.php');
?>
En el archivo de plantilla realicemos la inserción del título y del contenido:
<?php
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
?>
Enviemos la página del sitio web ensamblada al navegador:
<?php
echo $layout;
?>
Juntemos todo y obtendremos el siguiente código:
<?php
require 'connect.php';
$url = $_SERVER['REQUEST_URI'];
preg_match('#/page/(\d+)#', $url, $match);
$id = $match[1];
$query = "SELECT * FROM pages WHERE id=$id";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
$page = mysqli_fetch_assoc($res);
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Implemente el motor descrito. Compruebe su funcionamiento.