Motor baseado em banco de dados em PHP
Vamos agora fazer um motor de site no qual o conteúdo das páginas será armazenado não em arquivos, mas em um banco de dados. Suponha que temos uma tabela como esta no banco de dados:
| id | title | content |
|---|---|---|
| 1 | title1 | <div> content1 </div> |
| 2 | title2 | <div> content2 </div> |
| 3 | title3 | <div> content3 </div> |
Suponha que queremos obter nossas páginas através de
URLs como /page/1, onde o número
representará o id da página
que queremos obter.
Vamos começar a implementação. Primeiro, em um arquivo separado, façamos uma conexão com o banco de dados e conectemos este arquivo ao nosso:
<?php
$link = require 'connect.php';
?>
Vamos obter a URL solicitada:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Usando uma expressão regular, vamos dividir a URL em partes:
<?php
preg_match('#/page/(\d+)#', $url, $match);
?>
Vamos gravar o id do grupo de captura em uma variável:
<?php
$id = $match[1];
?>
Vamos executar uma consulta ao banco de dados, obtendo
a página solicitada pelo id:
<?php
$query = "SELECT * FROM pages WHERE id=$id";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
$page = mysqli_fetch_assoc($res);
?>
Vamos obter o arquivo de template:
<?php
$layout = file_get_contents('layout.php');
?>
No arquivo de template, vamos realizar a inserção do título e do conteúdo:
<?php
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
?>
Vamos enviar a página montada do site para o navegador:
<?php
echo $layout;
?>
Vamos juntar tudo e obter o seguinte 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 o motor descrito. Teste seu funcionamento.