Motor baseado em arquivos em PHP
Vamos implementar um motor de site que nos permitirá criar um arquivo de modelo, ao qual, dependendo do URL, será conectado conteúdo variado.
Suponha que a estrutura da nossa página seja a seguinte:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Vamos, no local onde a inserção de conteúdo deve ocorrer,
inserir um comando inventado por nós para a inserção,
por exemplo, este: {{ content }}. Vamos alterar o modelo do nosso site:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Agora, vamos criar uma pasta view, na qual
colocaremos os arquivos de conteúdo. Diretamente nesta
pasta ou em subpastas.
O primeiro arquivo será assim:
<div>
content 1
</div>
O segundo arquivo será assim:
<div>
content 2
</div>
O terceiro arquivo será assim:
<div>
content 3
</div>
Agora, vamos fazer com que, com base no URL
da barra de endereços, o arquivo correspondente
seja puxado. No nosso caso, para a URL /page1
será o primeiro arquivo, para a URL /dir/page2
- o segundo, e para a URL /dir/sub/page3
- o terceiro.
Vamos começar a implementação. Primeiro, no arquivo
.htaccess, vamos fazer com que todos os endereços
solicitados, exceto arquivos de recursos, sejam redirecionados
para a página index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
Na página index.php, vamos obter o URL solicitado em uma variável:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Em seguida, vamos obter o texto do arquivo de modelo:
<?php
$layout = file_get_contents('layout.php');
?>
Agora, com base no URL, vamos obter da pasta view
o arquivo de conteúdo correspondente:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Vamos substituir no texto do modelo o comando que inventamos pelo conteúdo obtido do arquivo:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Vamos exibir no navegador o arquivo de modelo com o modelo substituído:
<?php
echo $layout;
?>
Vamos juntar tudo e obter o seguinte 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 o motor baseado em arquivos descrito.