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

3 Şubat Cuma ´06
Dikkat: Bu yazının yazılma tarihinin üzerinden en az 60 gün geçmiş. İçerisindeki bilgiler güncelliğini yitirmiş olabilir. Yorumları ve güncellemeleri göz önünde bulundurarak yazıyı 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;
$modul = $_GET["modul"];

# modul secme mekanizmasi
  if( $modul == 'dosyalar' ){
    $modul_dosyasi = 'dosyalar.php';
  }else if( $modul == 'galeri' ){
    $modul_dosyasi = 'galeri.php';
  }else if( $modul == 'dokumanlar' ){
    $modul_dosyasi = 'dokumanlar.php';
  }else{
    // eger modul belirtilmemisse veya
    // gecersizse anasayfa modulu yuklensin.
    $modul_dosyasi = 'anasayfa.php';
  }
Ş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

Üye Resmi Uğur SAMSA
3 Şubat Pazar ´08 23:44
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
4 Şubat Pazartesi ´08 00:59
Hmm. Evet url'ler module olmuş, düzelttim.
Teşekkür ederim.
Üye Resmi oğuz
20 Şubat Çarşamba ´08 22:17
teşekkür ederim verdiğin bilgilerin için
Üye Resmi 0mer
22 Ağustos Cuma ´08 13:37
Süpersiniz..
Üye Resmi Muhammed Han Çetin
16 Eylül Salı ´08 10:13
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 omscelik
4 Kasım Salı ´08 14:34
güzel bir paylaşım.sagolun
4 Kasım Salı ´08 21:29
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 Ersin HAN
18 Ağustos Salı ´09 22:48
Ç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 Batuhan Göksu
5 Nisan Pazartesi ´10 16:53
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 ...
Üye Resmi Berk Arslangüder
5 Şubat Cumartesi ´11 20:18
<?php $module = $_GET["module"];
 
&#35; modul secme mekanizmasi
  if( $modul == 'iletisim' ){
    $modul_dosyasi = 'iletisim.php';
  }else if( $modul == 'kategori' ){
    $modul_dosyasi = 'kategori.php';
  }else if( $modul == 'dokumanlar' ){
    $modul_dosyasi = 'dokumanlar.php';
  }else{
    // eger modul belirtilmemisse veya
    // gecersizse anasayfa modulu yuklensin.
    $modul_dosyasi = 'anasayfa.php';
  } ?>

böyle ekledim fakat belirttiğiniz düzende url girdiğimde açılmıyor bunun için farklı bir kod gerekiyormu acaba
Üye Resmi Halit Alptekin
7 Şubat Pazartesi ´11 12:50
buraya kadar olan kısmı biliyorum ancak sorunum tasarımda inşallah o konudanda bahsedersin
Üye Resmi Alican YILDIZ
8 Şubat Salı ´11 22:06
switch(); fonksiyonu url işlerinde daha güzel açıkçası. if deyimini sadece kontrol edilecek birşey olduğunda kullanıyorum. Diğer urlden gelen verilerle uğraşırken switch daha çok iş görüyor.

<?php
$module = $_GET["module"];
//$modul dosyasını kontrole atıyoruz
switch($module){
    Default: //Öngürelen/Varsayılan sayfa
        echo "menu";
    Case "iletisim": //İf deyimi ile aynı işlevi görür
        include("$module".".php");
        break;
    Case "kategori":
        include("$menu".".php");
        break;
}


//kodlarda yanlışlık olabilir test etmeden yazdım.
Üye Resmi saharow
7 Şubat Salı ´12 08:49
Benimde sık kullandığım bir teknik. Hem işlevsellik kazandırıp hemde tek bir sayfada çalışmayı sağlıyor. Serverde fazla yer kaplamamasını sağlıyor ve gösterim hızıda yüksek oluyor.
Anlatım çok iyiydi.teşekkürler...
Üye Resmi Mod Ayhan
23 Aralık Salı ´14 05:49
Merhaba diğer arkadaşın dediği gibi if else yapısı biraz atıl kalır bu yönetemi kullanacak olanların switch yapısı kullanmasını tavsiye ederim.
Üye Resmi eşerf gül
18 Temmuz Cumartesi ´15 04:00
merhaba ben daha 8. sınıfa gidiyorum   :-D  bende bi site kurup site yapmayı ama bunu hazır deil, kod kullanarak yapmayı istiyorum nasıl yapacagımı hangi siteden daha rahat yapacagımı bilme istiyorum lutfen bana yardımcı olun böle şeyler yapmayı cok sevipte yapamıyorum   :-(  bana gmail adresimden ulaşırsanız mutlu olurum .....
Üye Resmi Ahmet YILMAZ
15 Haziran Çarşamba ´16 11:37
Acaba bu konuyu açıklayan küçük bir çalışma yapabilir misiniz?
Yeni Yorum *
İletişim Bilgileri
*
*
E-Posta adresiniz gösterilmeyecektir.
(unut)
Güvenlik Kodu *

Gönderiliyor