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:

layout.php<!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:

layout.php<!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:

view/page1.php<div>
  content 1
</div>

İkinci dosya şöyle olacak:

view/dir/page2.php<div>
  content 2
</div>

Üçüncü dosya şöyle olacak:

view/dir/sub/page3.php<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:

.htaccessRewriteEngine 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:

index.php<?php
  $url = $_SERVER['REQUEST_URI'];
?>

Daha sonra şablon dosyasının metnini alalım:

index.php<?php
  $layout = file_get_contents('layout.php');
?>

Şimdi URL'ye göre view klasöründen ilgili içerik dosyasını alalım:

index.php<?php
  $content = file_get_contents('view' . $url . '.php');
?>

Şablon metninde uydurduğumuz komutu, dosyadan alınan içerikle değiştirelim:

index.php<?php
  $layout = str_replace('{{ content }}', $content, $layout);
?>

Şablonu yerleştirilmiş şablon dosyasını tarayıcıda gösterelim:

index.php<?php
  echo $layout;
?>

Hepsini bir araya getirelim ve aşağıdaki kodu elde edelim:

index.php<?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;
?>
Задание 1

Açıklanan dosya tabanlı motoru uygulayın.