File-Based Engine in PHP
เราจะนำเอ็นจิ้นของเว็บไซต์มาใช้งาน ซึ่งจะช่วยให้ เราสามารถสร้างไฟล์เทมเพลตขึ้นมาได้ โดยเนื้อหาต่างๆ จะถูกเชื่อมต่อเข้ากับเทมเพลตนั้นตาม URL ที่เรียก
ให้โครงสร้างหน้าของเรามีลักษณะดังต่อไปนี้:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
ในตำแหน่งที่ควรจะแทรกเนื้อหา ลองแทรกคำสั่งที่เราคิดขึ้นมา
สำหรับการแทรก ตัวอย่างเช่นคำสั่งนี้: {{ content }} มาดัดแปลงเทมเพลตของเว็บไซต์ของเรา:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
คราวนี้มาสร้างโฟลเดอร์ view ซึ่ง
เราจะใช้สำหรับวางไฟล์เนื้อหา โดยจะวางในโฟลเดอร์นี้
หรือในโฟลเดอร์ย่อยก็ได้
ไฟล์แรกจะมีลักษณะดังนี้:
<div>
content 1
</div>
ไฟล์ที่สองจะมีลักษณะดังนี้:
<div>
content 2
</div>
ไฟล์ที่สามจะมีลักษณะดังนี้:
<div>
content 3
</div>
คราวนี้เรามาทำให้ไฟล์ที่เกี่ยวข้องถูกดึงขึ้นมาตาม URL
ที่กรอกในแถบที่อยู่ ในกรณีของเรา URL /page1
จะดึงไฟล์แรก, URL /dir/page2
จะดึงไฟล์ที่สอง, และ URL /dir/sub/page3
จะดึงไฟล์ที่สาม
มาเริ่มต้นการนำไปใช้กันดีกว่า เริ่มจากในไฟล์
.htaccess เราจะทำให้ทุกที่อยู่ที่ถูกเรียก
ยกเว้นไฟล์ทรัพยากร ถูกเปลี่ยนเส้นทาง
ไปที่หน้า index.php:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
บนหน้า index.php เราจะได้รับ URL ที่ร้องขอ
เก็บไว้ในตัวแปร:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
จากนั้นเราจะดึงข้อความจากไฟล์เทมเพลต:
<?php
$layout = file_get_contents('layout.php');
?>
คราวนี้เราจะดึงไฟล์เนื้อหาที่เกี่ยวข้องจากโฟลเดอร์ view
ตาม URL:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
แทนที่คำสั่งที่เราคิดขึ้นในข้อความเทมเพลต ด้วยเนื้อหาที่ได้จากไฟล์:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
แสดงไฟล์เทมเพลตพร้อมเนื้อหาที่แทรกแล้ว ไปยังเบราว์เซอร์:
<?php
echo $layout;
?>
รวบรวมทุกส่วนเข้าด้วยกันแล้วเราจะได้โค้ดดังต่อไปนี้:
<?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;
?>
ให้คุณนำ File-Based Engine ตามที่อธิบายไปใช้งาน