Bu yazıyı yazmama yine başıma gelen bir tecrübe sebep oldu. Sıradan bir web sitesi işi işte… Uzun bir aradan sonra yine bir CMS yazmam gerekti ve başladığım anda epey zorlandım. Çünkü her şeye sıfırdan başlamak biraz zor. Sistemi oturmak, verileri almak, View sistemi gibi şeyler yüzünden başlamam zor oldu. Bu yazıda o anlarda karşılaştığım zorluklar ve bulduğum çözümleri derlediğim bir ipucu kılavuzu olacak…
Ne yapacağınızı bilmeden öylece kalabilirsiniz. Öncelikle ne istediğinizi ve müşterinin ne istediğini düşünün. İstediğiniz tabi ki kod yazarak para kazanmak. Başka! Mesela bu projenin ileride de işinize yaramasını isteyebilirsiniz. Modüler bir sistem geliştirip sonraki çalışmalarınızın günler yerine saatler içinde bitmesini sağlayabilirsiniz. Peki hem modüler hem çabuk bir şekilde bu proje nasıl biter, veya nasıl başlar. En önemli sorununuz başlamak. İlk adımı atmak çok zordur.
İlk birkaç saat içindeki gelişme hoşunuza gitmeyebilir ve silebilirsiniz. Veya hazır kod çatısı kullanabilirsiniz ki ben kesinlikle kod çatısı kullanmanızı tavsiye ederim. Kısa sürede performanslı ve modüler projeler geliştirmek için kod çatısı bence şart. Peki başka. Diğer insanların veya şirketlerin yayınladığı kütüphaneleri kullanabilirsiniz. Mesela bu projede Codeigniter çatısına ve Twig şablon ön işlemcisine ihtiyacım oldu. Codeigniter’ın Twig desteği olmaması zor kısımdı. Bunu uyumlu hale getirmek için paket yöneticileri kullandım. Bunun için ayrı bir konu olacak. Dönelim konumuza;
Müşterinin isteğine bağlı olarak kullanacağınız kod çatısını seçin. Mesela küçük bir işletme için Codeigniter fazla gelebilir. Bunun için mini kod çatıları mevcut www.phpclasses.org gibi sitelerde size uygun bir kütüphane bulabilirsiniz.
Kullanacağınız kütüphaneleri temin edin. Mesela Twig ve Doctrine2 bu projede kullandığım kütüphanelerdi. Siz de işinize yarayabilecek veya işinizi kolaylaştırabilecek seçimler yapın. Kullanacağınız kütüphaneyi github’da inceleyin kaç yıldız almış. Hata geçmişi gibi ayrıntılara dikkat edin.
View yapınızı modüler yapmak isteyebilirsiniz. Böylece Hem php kod tarafının yanında uzun uzun view kodlamayla uğraşmazsınız. Mesela her sayfa için bir view klasörü açabilir ve her sayfanın parçalarını (Örn. content.twig, template.twig). Değişken isimlerini view’lerde aynı kullanarak zamandan ve bellekten tasarruf edebilirsiniz. Örn.
Buradaki gibi her sayfa için bir template ve content sayfası oluşturarak modüler bir şablon yapınız olabilir.
Veritabanı yapısını verimli kullanın ki kullanıcı zamandan tasarruf etsin. Veritabanı sorgularını her defasında uzun uzun yazmaktansa bunu için geliştirilmiş kütüphaneleri kullanın. Örneğin ORM yapısındaki doctrine2’yi öneririm. Her veritabanı satırını bir php nesne yapısı olarak oluşturuyor ve siz sadece php koduyla sorguları çalıştırabiliryorsunuz.
Ortak nesneleri harici klasörde tutun ve bunlara http ile erişin. Örneğin css ve javascript dosyalarını ana dizinde public/assets dizini içinde tutup bunları http linkleri ile çağırarak hız konusunda iyi bir adım atmış olursunuz.
Masterpage önemli mutlaka masterpage yapısı kullanın. Projenize özgü bir masterpage yapısı oluşturun. Eğer masterpage ile ilgili bilginiz yoksa mutlaka araştırın. Bu sayede temada bir değişiklik yapmanız gerektiğinde tek tek tüm sayfalarda değişiklik yapmaktansa masterpage’de değişiklik yaparak zaman kazanabilirsiniz.
En basitinden masterpage yapısı
<? Php include('/include/header.php') ; ?> <? Php include '/include/menu.php'; ?> <? Php include($content) ; ?> <? Php include('/include/footer.php') ; ?>
Masterpage’de içerik alanları için bile blok oluşturun. Yani mesela normal navigasyon linklerinin altına iç sayfaların view dosyalarında bile menü linki ekleyebilirsiniz. Bu linkler sadece sizin eklediğiniz sayfalarda görünür. Ana sayfada uzun uzun if-else kontrolü yapmaktan daha iyidir. Ya da iç sayfaların kendine özgü css kodlarına ihtiyacı olduğunda bunları head tag’i içine bu blok sistemi sayesinde yerleştirebilirsiniz. Twig bu yapıya oldukça uygundur. Sayfa içerisinde Twig ile döngüler if-else kontrolleri bile yapabilirsiniz.
Resim yükleme alanlarında mutlaka resim kırpma işlemi uygulayın bunu ister kullanıcıya ister kodun kendisine yaptırabilirsiniz. Örneğin bir profil resmi için 3 farklı boyutta kırpma işlemi yapmak resimlerin kullanıldığı sayfalar daha hızlı yüklenir. 1280×720’lik bir resmi 40px boyutunda bir çerçeveye oturmak pek mantıklı değil. Bence en az üç farklı boyut kullanılmalı.
Gereksiz dosyaları tutmayın. Örneğin Codeigniter içinde kullanım kılavuzu ile birlikte gelir. Bunu geliştirme aşamasında ana dizinde tutabilirsiniz. Ancak FTP’ye yükleme sırasında yaklaşık olarak 200-220 adet fazladan dosya yüklenecektir.
Gereksiz dosyaları tutmayın ama sonrada pişman olmamak için statik temanın orijinal halinin sıkıştırılmış bir kopyasını bulundurmak mantıklı bir hareket olabilir.
Son önerim versiyon kontrol sistemi git, svn, vcs ya da adı her neyse onu kullanın hem başkalarından yardım almak için hem projenizin her halinin bir yedeğine ulaşmak git kullanmanız oldukça akıllıca olacaktır.