Mehmet Fatih YILDIZ (mfyz.com)

Menü



Bir sitenin kod düzeni nasıl olmalı?

Kategori : PHP ve Pear Dökümanları
Eklenme Tarihi :
3 Şubat Cuma ´06




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.


Öncelikle şunu belirteyim, genel uyguladığım bir sistematiğim var ve bunu sizinle paylaşmak istiyorum. Çoğu template yapısına benzer bişey. Zaten çoğu arkadaşımın aşikar olduğu bir konudur bu.

Bir php site projesinin üretim sırası


Öncelikle sitedeki herşeyimiz bir php dosyası olarak kodlanmalı. Statik sayfalar için bile bir genelleme yaparak daha az kod daha az efor ile daha rahat bir çalışma çıkarabiliriz. Öncelikli düşünmemiz gereken şey dizin yapımızdır.Verilerimizle kodlarımızı kesinlikle ayırmamız gerekir. Mesela sitemizde dosyalar ve fotograflar diye iki bölümümüz olacak. Bunlara ait dosyaları kesinlikle kod ile karmaşık dizinlere koymayız. Veri adlı bir dizinimizin alt dizinlerine yerleştirebiliriz mesela.

Bu neden gereklidir?


Çünkü kodlardaki değişimleri HIZLI yükleyip yedeklerini alabilmek için tüm site dizinimizi upload edip download etmemize gerek kalmaz. Toplam 1mb olan kodu güncellemek için 30mb olan tüm site dosyalarının transferi için zaman kaybetmemiş oluruz.

İkinci düşüneceğimiz şey ise tasarımı nasıl şekillendireceğimizdir. Yani, her sayfada sabit olan kısımlarımız vardır. Ve değişken kısımlarımız. Mesela bu site için düşünürsek, üstteki menü, sol sütun ve alt kısım her sayfada mevcuttur.

Ben ilk başladığımda sabit şu dizinleri oluştururum;

Site
 |
 |- <dir> resimler
 |- <dir> moduller
 |- <dir> islem
 |
 '--- index.php
   |- stil.css
   '- ayar.php


Bu yapının önemini dökümanın sonuna doğru anlayacaksınız. Şimdi ön açıklamaları yapayım;
Sitenizdeki bütün resimleri yani materyal olan resimleri resim adlı dizinde alt dizinler içerisinde tutmanızı öneririm. Mesela bölümlerdeki farklı resimleri resim dizininde o bölümle ilgili dizin içerisinde saklayın. Böylece resimlerinizi ileriki sürümlerinizde daha rahat takip eder/yönetebilirsiniz.

Ayar dosyasının önemi!


Bir php projesi için ayar dosyasında her türlü site detayları mevcuttur. Hanig sayfada ne kadar limitle listeleme yapılacağıi mysql ayarlarınız, izin ayarlarınız, veri dizin yollarınız. Çok genişletilebilecek ayarlar mevcuttur. Daha önce bu konuda bir döküman yazdım, php dökümanları bölümünde var.

Modül mantığı nedir?


Sitemizde farklı bölümlerde farklı php görevlerimiz olacaktır değil mi?, şimdi şöyle düşünün, bütün sayfalar sitenin değişken bir noktasına uygun HTML kod üretir. Bütün projelerde sistem böyle çalışır. Genellikle benim anlattığım sistemin tersi uygulanır ve her php sayfasında menu.php footer.php'ler yüklenir. Boylece değişken kısım farklılığa göre yüklenmez, her sayfa kendi işini yapar ve statik kısımları çağırır. Benim bahsettiğim sistemde ise şöyledir. Bütün site index.php üzerinde oynar. get methodu ile module adlı bir değişken alalım her linkte. bu değişkenin içeriğine ait modulu seçen bir dosyamız vardır. Ya da bu kısım index.php'nin içinde de mevcut olabilir. Örneğime göre dosyalar, galeri, dokumanlar diye 3 bölümümüz olsun. Bir de anasayfaya ait kodu üreten bir modülümüz olacak tabiki. index.php'de şu kısım olmalı mesela;

  1. $modul = $_GET["modul"];
  2.  
  3. # modul secme mekanizmasi
  4.   if( $modul == 'dosyalar' ){
  5.     $modul_dosyasi = 'dosyalar.php';
  6.   }else if( $modul == 'galeri' ){
  7.     $modul_dosyasi = 'galeri.php';
  8.   }else if( $modul == 'dokumanlar' ){
  9.     $modul_dosyasi = 'dokumanlar.php';
  10.   }else{
  11.     // eger modul belirtilmemisse veya
  12.     // gecersizse anasayfa modulu yuklensin.
  13.     $modul_dosyasi = 'anasayfa.php';
  14.   }

Şimdi menüdeki linkleri buna göre düzenlemeliyiz.

Dosyalar : index.php?modul=dosyalar
Galeri : index.php?modul=galeri
Dökümanlar : index.php?modul=dokumanlar

Artık modul_dosyasi değişkeni seçili modülü belirlemektedir.
Şimdi şöyle düşünelim. mfyz.com'da sadece şu anda okuduğunuz yazının bulunduğu orta kısım değişmektedir. Diğer kısımlardaki küçük değişimlere geleceğim.
Bu orta kısımda sadece 1 adet değişken print ettiriliyor. $icerik diye bir değişken. Bu değişkeni ise modul dosyaları oluşturuyor.
Diyelim ki BASİT bir tablo içeriyor bir bölümünüz. Mesela örneğe göre olan dosyalar bölümünde basit bir liste var.
Şimdi burada dosyalar.php modülü sadece bu basit olan tabloyu print ettiriyor.
biz index.php'de print ettirilen bu tabloyu ortaya yerleştiriyoruz. Sistem bu şekilde işliyor.
Siz statik bir sayfa yapmışsanız bile bunu modül dosyası olarak tanıtıyorsunuz ve modül seçildiğinde basılması gereken yere statik içerik basılıyor.

Bunun avantajları neler?


Modül dosyaları asıl dosyalardan bağımsız yazıldığı için kod kalabalığı olmuyor. Yani 1000 satırlık tek dosyada çalışmakla 10'ar satırlık 100 dosyada çalışmak gibi.. Siz dosyalar modülünü yazarken dosyalar modülü dosyasında sadece o işi yapan kod bulunuyor. Ekrana basarken çok fazla şey düşünerek basmıyorsunuz. İş basitleşiyor. Sitenizin statik kısımlarında yapacağınız değişimler sizin için çocuk oyuncağı olmuş oluyor. Yaptığınız yeni bir eklentiyi, mesela footer'ınıza yerleştireceğiniz bir banner exchange kodunu index.php'nizde oynayarak rahatlıkla işin içinden sıyrılabiliyorsunuz.
Bölümler $module değişkeni ile kolaylıkla da seçilebiliyor.

Bölümleriniz çoğaldıkça bu sistemin artılarını daha rahat görebiliyorsunuz :-)
Ben şu an mfyz.com'da mükemmel rahat ediyorum. Çok rahat siteye entegre şeyler yazıp bölümleri değiştirebiliyorum.
Mesela yeni bir kod buldunuz ve dosyalar bölümünü bu şekilde yapmak istiyorsunuz, yapacağınız şey css'leri ile oynayıp modul olarak tanıtmanız, bu kadar.

Uygulamalı bir örnek olmadı özür dilerim ama yine de size yol gösterici bir döküman olduğundan eminim :-)


Hazırlayan : Mehmet Fatih YILDIZ


Yorumlar (9 yorum/ping var)



Üye Resmi Ziyaretçi : Uğur SAMSA
3 Şubat Pazar ´08 23:44 tarihinde yazmış
Merhaba,
Güzel bir makale olmuş. Teşekkürler. Ben de sizinkine yakın bir yol izliyorum.

Not : "$modul = $_GET["modul"];"  bölümünde çekilen değişkenin modul değil module olması gerekiyor. Henüz yeni olan arkadaşlar aynısını yaparlarsa ve çalışmazsa diye belirttim. İçeriği düzelttikten sonra yorumumun not kısmını silebilirsini.z
 


Üye Resmi Üye : mfyz
4 Şubat Pazartesi ´08 00:59 tarihinde yazmış
Hmm. Evet url'ler module olmuş, düzelttim.
Teşekkür ederim.
 


Üye Resmi Ziyaretçi : oğuz
20 Şubat Çarşamba ´08 22:17 tarihinde yazmış
teşekkür ederim verdiğin bilgilerin için
 


Üye Resmi Ziyaretçi : 0mer
22 Ağustos Cuma ´08 13:37 tarihinde yazmış
Süpersiniz..
 


Üye Resmi Ziyaretçi : Muhammed Han Çetin
16 Eylül Salı ´08 10:13 tarihinde yazmış
Verdiğiniz bilgiler için teşekkürler.Özellikle ayarlar.php sayfasıyla ilgili düşüncelerim değişti.Daha önceleri ayarlar.php sayfasında sadece mysql ayarlarını tutardım.Fakat bundan sonra tüm  ayarlarımı bu sayfada saklamayı düşünüyorum.
 


Üye Resmi Ziyaretçi : omscelik
4 Kasım Salı ´08 14:34 tarihinde yazmış
güzel bir paylaşım.sagolun
 


Üye Resmi Üye : the_nobody
4 Kasım Salı ´08 21:29 tarihinde yazmış
Zaman zaman kullandığım bir özellik. Yaptığınız işe bir "karizma" katıyor niyeyse ya da bana öyle geliyor =) ama kesinlikle çok sayfası olan biraz daha karmaşık sitelerde işe yarayan bir teknik. Her sayfada include(); fonksiyonunu kullanmaktansa tek bir dosyada kullanmak daha kolay oluyor, hem site yapım hızı artıyor hem de rahatlık sağlıyor yapı bakımından...
 


Üye Resmi Ziyaretçi : Ersin HAN
18 Ağustos Salı ´09 22:48 tarihinde yazmış
Çok güzel bir yazı olmuş. Daha önce buna benzer bir yönetim paneli hazırlamıştık. Başlarda mantığını anlamak zor olmuştu ama öğrendikten sonra inanılmaz kolaylık sağlıyor.
 


Üye Resmi Ziyaretçi : Batuhan Göksu
5 Nisan Pazartesi ´10 16:53 tarihinde yazmış
bence smarty veya kendi yazıcağın template motoru ile html kodalarını php kodlarından ayarırarak çalışmaktır hem daha düzgün bir kodlama hemde arayüzü tekrar değiştirmek istediğiniz zaman rahatlıkla değiştirebilirsiniz php ile html kodları iç içeyken olan karışıklıkta ortadan kalkmış olur ...
 


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 10 ziyaretçi geziniyor. Toplam 114 makale, 208 yazı, 3000 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