Enjin Berasaskan Fail dalam PHP
Kami akan melaksanakan enjin laman web yang akan membolehkan kami membuat fail templat, di mana kandungan berbeza akan disambungkan kepadanya bergantung pada URL.
Andaikan struktur halaman kami kelihatan seperti berikut:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Mari kita di tempat di mana kandungan harus dimasukkan
masukkan arahan yang kami cipta untuk sisipan, contohnya seperti ini:
{{ content }}. Mari ubah templat laman web kami:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Sekarang mari buat folder view, di mana
kami akan meletakkan fail kandungan. Sama ada terus dalam
folder ini atau dalam subfolder.
Fail pertama akan seperti ini:
<div>
content 1
</div>
Fail kedua akan seperti ini:
<div>
content 2
</div>
Fail ketiga akan seperti ini:
<div>
content 3
</div>
Sekarang mari kita buat supaya mengikut URL
dari bar alamat, fail yang sepadan
akan diambil. Dalam kes kami, untuk url /page1
akan dapat fail pertama, untuk url /dir/page2
- yang kedua, dan untuk url /dir/sub/page3
- yang ketiga.
Mari kita mulakan pelaksanaan. Mula-mula dalam fail
.htaccess, mari kita buat supaya semua alamat yang diminta,
kecuali fail sumber, diarahkan semula
ke halaman index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
Pada halaman index.php, kami akan dapatkan URL yang diminta
ke dalam pembolehubah:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Kemudian dapatkan teks fail dengan templat:
<?php
$layout = file_get_contents('layout.php');
?>
Sekarang mengikut URL, dapatkan dari folder view
fail kandungan yang sepadan:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Gantikan dalam teks templat arahan yang kami cipta dengan kandungan yang diperoleh dari fail:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Tunjukkan dalam pelayar fail templat dengan templat yang digantikan:
<?php
echo $layout;
?>
Mari kumpulkan semuanya dan dapatkan kod berikut:
<?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;
?>
Laksanakan enjin berasaskan fail yang diterangkan.