Mehmet Fatih YILDIZ (mfyz.com)

Menü



Tek dosyalı projeler (siteler) üretmek

Kategori : PHP ve Pear Dökümanları
Eklenme Tarihi :
18 Şubat Pazartesi ´08




Dikkat : Dökümanın yazılma tarihi üzerinden en az 60 gün (2 ay) geçmiş. İçerisindeki bilgiler güncelliğini yitirmiş olabilir, uygulamada ufak sorunlar oluşabilir. Yorumları ve güncellemeleri göz önünde bulundurarak dökümanı takip ediniz.


Bazen yazdığınız/yazacağınız modül/sayfa/proje çok işlem ve bölüm içermeyebilir. Farklı içeriğe sahip kısa ama çok metin olabilir elinizde. Ya da modülünüzde işlemler kısadır. Ya da tamamen ilginçlik olsun diye tek dosyada birçok işi yaptırmak isteyebilirsiniz.

Mesela sadece bir dizini listeleyip, dosyalar üzerinde ufak işlemler yaptıran bir betik yazıyor olabilirsiniz. Ya da bir reklam kampanyası için reklam sayfasının yanında ufak bir bilgi (hakkında) sayfası ve iletişim formu olan bir site-cik yapıyor olabilirsiniz.

Ufak işlemler içeren sayfalara bir sürü dosya oluşturup dosya kalabalığı yaptırmaktansa tek dosyada toplayabilirsiniz. Bu dökümanda ufak bir örnekle tek dosyadan oluşan bir site/sayfa yapacağım.


Başlıyoruz


Önce basit html yapınızı modüler yapıdaki gibi hazırlayalım.

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2.  "http://www.w3.org/TR/html4/loose.dtd">
  3.     <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  4.     <title>Tek dosyadan oluşan sayfam</title>
  5.   </head>
  6.   <h1>Fatih'in sitesi</h1>
  7.   <ul>
  8.     <li><a href="index.php">Anasayfa</a></li>
  9.     <li><a href="index.php?bolum=hakkimda">Hakkımda</a></li>
  10.     <li><a href="index.php?bolum=projeler">Projeler</a></li>
  11.     <li><a href="index.php?bolum=iletisim">İletişim</a></li>
  12.   </ul>
  13.   <hr>
  14.     içerik kısmı
  15.   </div>
  16.   <hr>
  17.   Mehmet Fatih YILDIZ 2008
  18. </body>
  19. </html>

gördüğünüz gibi oldukça basit. Site başlığı, ufak bir menü iki HR arasında sayfa içeriği ve sayfa sonu notu. Sayfa içeriği kısmına modüler yapıdaki gibi içerğimizi basacağız.

Şimdi 4-5 tane sayfamız var bunların içeriklerini gömeceğiz dosyamızın içine. Aslında hepsi basit bir kontrol mekanizması ile hallolacak.

  1. <?php
  2.  
  3. // bilgiler
  4. $bolum = $_GET["bolum"];
  5. $islem = $_GET["islem"];
  6.  
  7. // ekrana basilani tamponlayalim
  8. // sayfa icerikleri
  9. if( $bolum == 'hakkimda' ){
  10. echo <<<HTML_SON
  11.  
  12. <h2>Hakkımda</h2>
  13.  
  14. Ben buyum şunları bunları yaparım falan feşmekan.<br>
  15. <br>
  16. Şurada okudum, burada okuyorum büyüyünce X olacağım<br>
  17. <br>
  18. siteyi şöyle yaptım böyle ettim.
  19.  
  20. HTML_SON;
  21. }else if( $bolum == 'projeler' ){
  22. echo <<<HTML_SON
  23.  
  24. <h2>Projelerim</h2>
  25.  
  26. PHP ile şu projelerin altyapısıyla uğraşıyorum.
  27. Hede hödö
  28.  
  29. HTML_SON;
  30. }else if( $bolum == 'iletisim' ){
  31. echo <<<HTML_SON
  32.  
  33. <h2>İletişim</h2>
  34.  
  35. İletişim bilgilerim : asd@asd.com<br>
  36. <br>
  37.  
  38. <form action="index.php?islem=iletisim" method="post">
  39.   Ad : <input type="text" name="ad">
  40.   <br>
  41.   E-posta : <input type="text" name="ad">
  42.   <br>
  43.   Mesaj : <textarea name="ad"></textarea>
  44.   <br>
  45.   <input type="submit" value="Mesajı gönder">
  46. </form>
  47.  
  48. HTML_SON;
  49. }else{ // anasayfa
  50. echo <<<HTML_SON
  51.  
  52. Siteme hoşgeldiniz
  53.  
  54. HTML_SON;
  55. }
  56. // tamponlanan icerigi alalim
  57. $icerik = ob_get_contents();
  58. // tamponu bosaltalim, ekrana basilmasin
  59.  
  60. ?>
  61. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  62.   "http://www.w3.org/TR/html4/loose.dtd">
  63. ...

Yukarıda gördüğünüz gibi sayfa içeriklerini kontrole göre ekrana bastık. Burada dikkatinizi 2 şey çekmiştir. ob_start, ob_get_contents ve ob_end_clean fonksiyonlarını ekrana basılan şeyleri $icerik değişkenine aktarabilmek için yaptım.

echo'daki

  1. echo <<<HTML_SON
  2. ...
  3. HTML_SON;

kullanımı ise "HTML_SON" kelimesini bitirme kelimesi olarak görerek içeride tırnakları istediğimiz gibi kullanma özgürlüğü sunduğu için yaptım. Yani HTML_SON'ların arasında özgürce istediğiniz her karakteri kullanabilirsiniz. Bu sayede html olarak hazırladığınız sayfa içeriklerini 1-1 kopyala yapıştırarak rahatça işinizi halledebilirsiniz.

Gelelim neden çıktıyı tamponladığıma, bu işlemi hiç echo, tamponlama kullanmadan şöyle de yapabilirdiniz :

  1. if( $bolum == 'hakkimda' ){
  2. $icerik = "<h2>Hakkımda</h2>
  3.  
  4. Ben buyum şunları bunları yaparım falan feşmekan.<br>
  5. <br>
  6. Şurada okudum, burada okuyorum büyüyünce X olacağım<br>
  7. <br>
  8. siteyi şöyle yaptım böyle ettim.";
  9. }else if( $bolum == 'projeler' ){
  10. $icerik = "<h2>Projelerim</h2>
  11.  
  12. PHP ile şu projelerin altyapısıyla uğraşıyorum.
  13. Hede hödö";
  14. }else if( $bolum == 'iletisim' ){
  15. ...

Ama bir sürü tırnak sorunu ile uğraşmanız gerekebilirdi.

Neyse içeriklerimizi get ile gelen bolum parametresine göre belirlediğimize göre htlm'imizde konumlandırabiliriz. Sayfanızdaki "içerik kısmı" yazan yere

  1. ...
  2.   <hr>
  3.   <div>
  4.     <?=$icerik;?>
  5.   </div>
  6.   <hr>
  7. ...

$icerik değişkenini basıyoruz. Böylece tek sayfada içerik basabiliyoruz.

İşin bir de işlem kısmı var. Yani tek dosyada toplamaya çalıştığınız site/sayfa sadece içerikten oluşmak zorunda değil. Aynı zamanda php'ye bazı işler yaptırmanız gerekebilir. Hatta modül için bu tek dosya mantığını düşünürseniz işlem modüllerinde içerik değil sadece işlemler vardır. Aynı mantıkla bunu da yapabilirsiniz.

Örnekte gördüğünüz gibi iletişim bölümünde bir iletişim formu var. Bunu işleyen kısmı buraya gömmek için sayfa içeriklerini seçtirmeden önce işlemler için de bir kontrol bloüu koyuyoruz.

  1. <?php
  2.  
  3. // bilgiler
  4. $bolum = $_GET["bolum"];
  5. $islem = $_GET["islem"];
  6.  
  7. // once islemler kontrol edilmeli
  8. if( $islem == 'iletisim' ){
  9.  
  10.   // iletisim formunu eposta ile gonderen
  11.   // veya veritabanina kaydeden kodu
  12.   // buraya yerlesitiryorsunuz
  13.  
  14.   /* tabiki islemler bittikten sonra exit ile
  15.   betigin calismasini durdurmaniz lazim.
  16.   zaten bundan once işleminizin sonucunu
  17.   ekrana basmis olmaniz lazim.
  18.   "başarıyla gönderildi" veya gönderilemedi gibi */
  19.   exit();
  20.  
  21. }
  22.  
  23. /*
  24. Eğer birden fazla işleminiz varsa else if koyarak işlemlerinizi
  25. tanımlayıp buraya ekleyebilirsiniz.
  26.  
  27. Fakat else koymayın. Çünkü işlem değişkeni olmak zorunda değil.
  28. mesela sadece içerik gösteriliyorsa islem parametresi yoktur.
  29. */
  30.  
  31.  
  32. ...
  33. ...

işlemleri de sayfaya gömdükten sonra son sayfa şuna benzer olacak :

<?php

// bilgiler
$bolum = $_GET["bolum"];
$islem = $_GET["islem"];

// once islemler kontrol edilmeli
if( $islem == 'iletisim' ){

  // iletisim islemleri
 
  exit();

}

// ekrana basilani tamponlayalim
ob_start();
// sayfa icerikleri
if( $bolum == 'hakkimda' ){
echo <<<HTML_SON

<h2>Hakkımda</h2>

Ben buyum şunları bunları yaparım falan feşmekan.<br>
<br>
Şurada okudum, burada okuyorum büyüyünce X olacağım<br>
<br>
siteyi şöyle yaptım böyle ettim.

HTML_SON;
}else if( $bolum == 'projeler' ){
echo <<<HTML_SON

<h2>Projelerim</h2>

PHP ile şu projelerin altyapısıyla uğraşıyorum.
Hede hödö

HTML_SON;
}else if( $bolum == 'iletisim' ){
echo <<<HTML_SON

<h2>İletişim</h2>

İletişim bilgilerim : asd@asd.com<br>
<br>

<form action="index.php?islem=iletisim" method="post">
  Ad : <input type="text" name="ad">
  <br>
  E-posta : <input type="text" name="ad">
  <br>
  Mesaj : <textarea name="ad"></textarea>
  <br>
  <input type="submit" value="Mesajı gönder">
</form>

HTML_SON;
}else{ // anasayfa
echo <<<HTML_SON

Siteme hoşgeldiniz

HTML_SON;
}
// tamponlanan icerigi alalim
$icerik = ob_get_contents();
// tamponu bosaltalim, ekrana basilmasin
ob_end_clean();

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Tek dosyadan oluşan sayfam</title>
  </head>
<body>
  <h1>Fatih'in sitesi</h1>
  <ul>
    <li><a href="index.php">Anasayfa</a></li>
    <li><a href="index.php?bolum=hakkimda">Hakkımda</a></li>
    <li><a href="index.php?bolum=projeler">Projeler</a></li>
    <li><a href="index.php?bolum=iletisim">İletişim</a></li>
  </ul>
  <hr>
  <div>
    <?=$icerik;?>
  </div>
  <hr>
  Mehmet Fatih YILDIZ 2008
</body>
</html>



Modüler yapıya ne oldu?


Daha önce http://www.mfyz.com/?/dokuman/52/bir-sitenin-kod-d.....il-olmali/ dökümanında bahsettiğim bir modüler yapı vardı. Her türlü projenizde bu mantığı kullanmanızı önermiştim. Bu dökümanın amacı ufak projeler için zaten. Farkındaysanız örnekte verdiğim kodlar müthiş kısa kodlar. Çok basit bir site bile yapsanız bu kodlar uzayıp gidecektir. Bir de şunu unutmayın : eğer kodlarınız (yani bölümler veya işlemlerdeki) genellikle 20-30 satırı geçen kodlar ise bu yöntem hata yakalamanızı, sorun yaşadığınızda çözme sürenizi, çalışabilirliğinizi ve kodun temizliğini kötüleştirecek/zorlaştıracaktır. Onun için çok paranoyak veya ihtiyaç duymadığnız sürece bu mantığı kullanmayın. Modüler yapıyla ilgili yazdığım döküman çok daha faydalı olacaktır.


Hazırlayan : Mehmet Fatih YILDIZ


Yorumlar (7 yorum/ping var)



Üye Resmi Üye : MorPortakal
23 Şubat Cumartesi ´08 14:33 tarihinde yazmış
süpersin
 


Üye Resmi Ziyaretçi : Mkrc
2 Mart Pazar ´08 00:08 tarihinde yazmış
guzel yontem ama bunun yerıne switch dongusu ve fonksiyonları kullanmamız daha iyi olmazmı?
 


Üye Resmi Üye : mfyz
2 Mart Pazar ´08 19:17 tarihinde yazmış
tabiki, hepsi de çalışan çözümler. alışkanlıkla ilgili şeyler sonuçta bunlar.
 


Üye Resmi Üye : mustafairen
2 Mart Pazar ´08 22:00 tarihinde yazmış
Basit bir sitemi böyle yapmıştım (: vakt-i zamanında...

Döküman haline gelmesi güzel olmuş eline sağlık.
 


Üye Resmi Ziyaretçi : Muhammed Han Çetin
16 Eylül Salı ´08 10:38 tarihinde yazmış
Mehmet bey yazılarınızı takip ediyorum.Çok yararlı içerikler sunuyorsunuz.Yalnız burda verdiğiniz bilgilerle ilgili bir sorum olacak.Bu yöntemi kullanmak sitenin hızlı çalışmasını sağlar mı ? Eğer sağlıyorsa daha önce yaptığım gibi bu yöntemi kullanmaya devam edicem.Yok herhangi bi yararı yoksa da kod karmaşasından başka bişey değil deyip eski usûl ayrı sayfalarla çalışmaya başlıcam.Şimdiden teşekkürler
 


Üye Resmi Üye : mfyz
18 Eylül Perşembe ´08 18:10 tarihinde yazmış
Bu çok ufak projeler için kullanılabilecek bir şey. Yoksa dediğiniz gibi tamamen kod kalabalığı oluşturacaktır.
Modüler ilerlemeye özen gösterin. İşleri yapan kısımları fonksiyon veya sınıflara dönüştürüp bunları HTML döken kısımlar için HTML dosyalarına php yazın.
Yani bir sistemin arkasındaki yapılan iş ile o sistemin arayüzünü ne kadar ayırabilirseniz o kadar iyi olacaktır.
 


Üye Resmi Üye : crus4d3r
15 Kasım Cumartesi ´08 17:07 tarihinde yazmış
Evet kodun yeniden kullanılabilir olması için size uğraştıracakda olsa modüler programlamayı tavsiye ediyorum.İşlevleri fonksiyonlara bölerek geliştirin.
 


Yeni Yorum

Önce Okuyun Yorumlarınızda sosyal, dini ve politik taraflı mesajlar, başkalarına saldırı sayılabilecek laflardan kaçının. Argo kelimeler, küfürler otomatik olarak silinecektir. Bu kural ihlalleri ip, üyelik, isiminizin banlanmasına yol açabilir.

Lütfen yardıma yönelik, konuyu uzatacak sorularınızı/yorumlarınızı forumda yazınız. Burası konu dahilindeki kısa soluklu öneri/yorumlar içindir. Aksi halde yorumunuzu göremeyebilir, uyarı alabilirsiniz.

Hatırlatmak amacıyla : html kodlarının, link yapmak, vb amacıyla gireceğiniz ekstra bilimum şeylerin çalışmayacağını belirteyim. Yorumlayıcı zaten linklerinizi otomatik çevirecek, gülücüklerinizi dönüştürecektir. Zengin metin özellikleri için araç çubuğundaki butonları kullanın.


İletişim Bilgileri


E-Posta adresiniz gösterilmeyecektir.

(unut)

Üye iseniz, giriş yapıp bu bilgileri girmeden hızlıca yorum yapabilirsiniz. Yorumunuzda resminiz/ikonunuz ve profil bağlantınız görüntülenecek, aynı zamanda güvenlik kodu girmek zorunda da kalmayacaksınız.
Üye olmak için buraya tıklayın.

Güvenlik Kodu
Güvenlik kodunu göremiyorsanız sayfayı yenileyin!


Yukarıdaki güvenlik kodunu bu kutuya yazın.

Yorum   
- +

Ad soyad, eposta ve yorum alanları
(⊗ işaretli alanlar) zorunludur.





mfyz.com'da şu an 11 ziyaretçi geziniyor. Toplam 112 makale, 193 yazı, 2642 gönderi var



  • RSS mfyz.com'u RSS beslemeleri ile takip edebilirsiniz
  • ServerTR Hosting Sponsoru ServerTR.com'a çok teşekkür ederiz
  • CC 2.5 Sitedeki materyalleri Creative Commons 2.5 Lisansı çerçevesinde kullanabilirsiniz. Lisans hakkında bilgi almak için tıklayın
  • İstatistikler Site ziyaret istatistikleri, konu, eğilim gibi ilginç istatistikler hakkında
  • Site Hakkında Site altyapısı, hazırlanışı, kurallar ve felsefesi hakkında
  • İletişim İletişim formu, iletişim bilgileri

mfyz.com Türk Programcılığının Gelişmesine Adanmıştır
HTML Standartlarına Uygundur

CSS Standartlarına Uygundur