PHP 8'de layouts (düzenler), genellikle MVC (Model-View-Controller) yapısında web uygulamaları geliştirirken kullanılan bir kavramdır. Layouts, uygulamanın genel tasarımını (header, footer, menü gibi tekrar eden kısımlar) şablon dosyalarına ayırarak merkezi bir yerden yönetilmesini sağlar. Böylece sayfalar arasındaki tutarlılık korunur ve kodun tekrar yazılmasının önüne geçilir.
Layout kullanımı, genellikle PHP'deki include
ve require
fonksiyonlarıyla manuel olarak yapılabileceği gibi, Blade, Twig gibi şablon motorlarıyla daha yapılandırılmış ve güçlü hale getirilebilir.
1. PHP ile Temel Layout Kullanımı
Basit bir PHP yapısında layoutlar, genellikle include
veya require
fonksiyonlarıyla sayfaların ortak parçalarını (örneğin header, footer) içerir.
Örnek: PHP ile Basit Layout Kullanımı
header.php (Başlık ve menü için):
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $sayfaBasligi; ?></title>
</head>
<body>
<header>
<h1>Web Sitem</h1>
<nav>
<ul>
<li><a target="_blank" href="index.php">Anasayfa</a></li>
<li><a target="_blank" href="hakkimizda.php">Hakkımızda</a></li>
<li><a target="_blank" href="iletisim.php">İletişim</a></li>
</ul>
</nav>
</header>
footer.php (Alt bilgi için):
<footer>
<p>© 2024 Web Sitem. Tüm Hakları Saklıdır.</p>
</footer>
</body>
</html>
index.php (Ana sayfa):
<?php
$sayfaBasligi = "Anasayfa";
include 'header.php'; // Header ve menü kısmını ekliyoruz
?>
<main>
<h2>Hoş Geldiniz!</h2>
<p>Bu anasayfanın içeriğidir.</p>
</main>
<?php include 'footer.php'; // Footer kısmını ekliyoruz ?>
Bu yapıda:
-
header.php
vefooter.php
dosyaları site genelinde tekrar kullanılabilecek kısımları içerir. -
index.php
gibi sayfalar bu kısımlarıinclude
komutuyla çağırarak site genelinde ortak yapılar kullanır. - Değişiklik yapmak istediğinizde sadece
header.php
veyafooter.php
dosyalarını düzenlemek yeterlidir. Bu sayede tüm sayfalara yansıyan bir değişiklik yapmış olursunuz.
2. Gelişmiş Layout Yapısı
Büyük uygulamalarda, sayfa düzenini yönetmek ve her sayfada aynı kodları tekrar etmemek için bir ana layout şablonu oluşturmak yaygın bir yaklaşımdır. Bu şablon, her sayfanın genel yapısını içerir ve sayfanın içerik kısmı dinamik olarak eklenir.
Örnek: PHP ile Ana Layout Şablonu
layout.php (Ana şablon):
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $sayfaBasligi ?? "Web Sitem"; ?></title>
</head>
<body>
<header>
<h1>Web Sitem</h1>
<nav>
<ul>
<li><a target="_blank" href="index.php">Anasayfa</a></li>
<li><a target="_blank" href="hakkimizda.php">Hakkımızda</a></li>
<li><a target="_blank" href="iletisim.php">İletişim</a></li>
</ul>
</nav>
</header>
<main>
<?php echo $sayfaIcerigi; // Sayfanın içerik kısmı ?>
</main>
<footer>
<p>© 2024 Web Sitem. Tüm Hakları Saklıdır.</p>
</footer>
</body>
</html>
index.php (İçeriğin dahil edilmesi):
<?php
$sayfaBasligi = "Anasayfa";
$sayfaIcerigi = "<h2>Hoş Geldiniz!</h2><p>Bu, anasayfanın içeriğidir.</p>";
include 'layout.php'; // Ana layout şablonunu çağırıyoruz
?>
Bu yapıda:
-
layout.php
ana şablon tüm sayfalar için genel yapıyı belirler. Başlık, navigasyon menüsü ve footer gibi sabit kısımlar burada tanımlanır. -
index.php
gibi sayfa dosyaları sadece dinamik içerik sağlar ve layout dosyasına içerik aktarır. - Bu sayede, her sayfada tekrar eden HTML yapısından kurtulmuş oluruz ve sayfalar daha modüler bir şekilde düzenlenmiş olur.
3. Şablon Motorlarıyla Layout Kullanımı (Blade, Twig)
PHP’de yaygın olarak kullanılan framework'lerde (örneğin Laravel ve Symfony), layout yapıları şablon motorlarıyla daha gelişmiş bir şekilde yönetilir. Laravel'de Blade, Symfony'de Twig gibi şablon motorları layout kullanımını çok daha kolay hale getirir.
Blade ile Layout (Laravel)
Blade şablon motoru, @extends
ve @yield
komutları ile layout kullanmanızı sağlar.
layout.blade.php (Ana layout):
<!DOCTYPE html> <html lang="tr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@yield('title', 'Web Sitem')</title> </head> <body> <header> <h1>Web Sitem</h1> <nav> <ul> <li><a target="_blank" href="/">Anasayfa</a></li> <li><a target="_blank" href="/hakkimizda">Hakkımızda</a></li> <li><a target="_blank" href="/iletisim">İletişim</a></li> </ul> </nav> </header> <main> @yield('content') </main> <footer> <p>© 2024 Web Sitem. Tüm Hakları Saklıdır.</p> </footer> </body> </html>
anasayfa.blade.php (İçerik sayfası):
@extends('layout') @section('title', 'Anasayfa') @section('content') <h2>Hoş Geldiniz!</h2> <p>Bu, anasayfa içeriğidir.</p> @endsection
Bu yapıda:
-
@extends
ilelayout.blade.php
dosyasına bağlanılır. -
@yield
komutları, alt sayfaların (örneğinanasayfa.blade.php
) içeriklerini yerleştirebileceği yerleri tanımlar. - Bu sayede her sayfa için ortak bir layout yapısı korunur ve sadece dinamik içerik her sayfaya özgü olarak eklenir.
Twig ile Layout (Symfony)
Twig şablon motoru da benzer şekilde block
ve extends
yapılarıyla layout kullanmayı sağlar.
layout.twig (Ana layout):
<!DOCTYPE html> <html lang="tr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{% block title %}Web Sitem{% endblock %}</title> </head> <body> <header> <h1>Web Sitem</h1> <nav> <ul> <li><a target="_blank" href="/">Anasayfa</a></li> <li><a target="_blank" href="/hakkimizda">Hakkımızda</a></li> <li><a target="_blank" href="/iletisim">İletişim</a></li> </ul> </nav> </header> <main> {% block content %}{% endblock %} </main> <footer> <p>© 2024 Web Sitem. Tüm Hakları Saklıdır.</p> </footer> </body> </html>
anasayfa.twig (İçerik sayfası):
{% extends "layout.twig" %} {% block title %}Anasayfa{% endblock %} {% block content %} <h2>Hoş Geldiniz!</h2> <p>Bu, anasayfa içeriğidir.</p> {% endblock %}
4. Layout Kullanmanın Avantajları
- Kod Tekrarını Azaltma: Layoutlar, tüm sayfalarda tekrar eden HTML/PHP