PHP'de Dosya Tabanlı Motor
Bize, URL'ye bağlı olarak farklı içeriğin bağlanacağı bir şablon dosyası oluşturmamızı sağlayacak bir site motoru uygulayacağız.
Sayfamızın yapısının aşağıdaki gibi göründüğünü varsayalım:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
İçeriğin eklenmesi gereken yere, kendimizin
uydurduğu bir ekleme komutu yerleştirelim,
örneğin şöyle: {{ content }}. Sitemizin şablonunu değiştirelim:
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Şimdi içerik dosyalarını yerleştireceğimiz
view klasörünü oluşturalım. Doğrudan bu
klasörde veya alt klasörlerde.
İlk dosya şöyle olacak:
<div>
content 1
</div>
İkinci dosya şöyle olacak:
<div>
content 2
</div>
Üçüncü dosya şöyle olacak:
<div>
content 3
</div>
Şimdi, adres çubuğundaki URL'ye göre ilgili
dosyanın çekilmesini sağlayalım. Bizim durumumuzda
/page1 URL'si için birinci dosya,
/dir/page2 URL'si için ikinci dosya
ve /dir/sub/page3 URL'si için üçüncü
dosya olacak.
Uygulamaya başlayalım. İlk olarak,
.htaccess dosyasında, kaynak dosyalar
hariç tüm istenen adreslerin index.php
sayfasına yönlendirilmesini sağlayalım:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
index.php sayfasında, bir değişkene
istenen URL'yi alalım:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Daha sonra şablon dosyasının metnini alalım:
<?php
$layout = file_get_contents('layout.php');
?>
Şimdi URL'ye göre view klasöründen
ilgili içerik dosyasını alalım:
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Şablon metninde uydurduğumuz komutu, dosyadan alınan içerikle değiştirelim:
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Şablonu yerleştirilmiş şablon dosyasını tarayıcıda gösterelim:
<?php
echo $layout;
?>
Hepsini bir araya getirelim ve aşağıdaki kodu elde edelim:
<?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;
?>
Açıklanan dosya tabanlı motoru uygulayın.