Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer

Kendi Günlüğünü Kendin Yaz – 1

3 min read

İlginç bir yazı dizisinin ilk bölümünü okumaktasınız. Yazının başlığı sanırım konuyu yeterince özetliyor. “Eğer kendi günlük sistemimi/betiğimi (script) yazmak isteseydim nereden başlar, hangi aşamaları takip ederdim?” gibi soruları cevaplamaya çalışacağım. Böyle bir makale ile programcı arkadaşlara ticari veya kişisel bir içerik yönetim sistemi (İYS) yazılırken nasıl bir yol izlenmesi gerektiği konusunda fikir vermeyi planlıyorum. Umarım faydası dokunur.

İsim seçimi

Öncelikle günlüğümüze bir isim seçmeliyiz. Böylece klasör isminden tutun da veritabanı tablolarını oluşturmaya kadar bu isim çerçevesinde hareket edebiliriz. Burada oluşturduğumuzu varsaydığımız günlüğe YGünlük ismini verdim.

Günlüğün Kapsamı ve Yetenekleri

Bir projeye başlamadan önce projenin kapsamı mutlaka belirlenmelidir. Böylece gelişim aşamasında yoldan şaşmalar olmaz ve hep amaca yönelik çalışırsınız. Aksi takdirde bir anda kendinizi gereksiz detaylara boğulmuş bir şekilde bulabilirsiniz. YGünlük’ü ilk aşamada oldukça basit yeteneklerle sınırlayalım. Ne de olsa amacımız gidilecek yolu belirlemek. Önce ana yapıyı tamamlarsak ardından dilediğimiz gibi geliştirebilir, yeni özellikler katabiliriz.

Bu söylediklerim kapsamında düşünürsek YGünlük belirli bir tasarıma sahip olsun ve tema desteği bulunmasın diyorum. Hatta bununla birlikte eklenti olayını da düşünmeyelim (şimdilik). Bir de en önemli kısıtlamalardan birisi olarak üyelik sistemi bulundurmayalım. Sadece bir yönetici olsun ve herkes yorum yapabilsin. Oldukça basite indirgediğimiz YGünlük’ün özelliklerini bir liste haline getirisek;

  • PHP ile yazılmış olup MySQL veritabanını kullanacak.
  • AJAX ile güçlendirilecek.
  • Yönetim paneli olacak ve sadece bir yönetici/yazar bulunacak. Üyelik sistemi olmayacak.
  • İçerik olarak yazılar, sayfalar (ör. Hakkımızda) ve yorumlar olacak.

İlk bakışta size oldukça sade ve gereksiz gibi gelebilir ama konuya sıfırdan başlamak lazım. Temelini anlarsanız dilediğiniz gibi bir içerik yönetim sistemi yazabilirsiniz.

Dizin Yapısının Belirlenmesi

Önce günlüğümüzün dizin yapısını oluşturacak ve ardından içini dosyalarımızla doldurmaya başlayacağız. Dizini şu şekilde düşünelim;
Ana klasör
ygunluk : Bütün sistemimizi içeren klasör.

Alt klasörler
panel: Yönetim panelimizin bulunacağı klasör.
bilesenler: Günlüğümüzü oluştururken kullanacağımız betik kütüphane ve fonksiyon dosyalarının bulunacağı klasör.
ekdosyalar: Yazılarımız içinde okuyucularımızla paylaşmak istediğimiz dosyaları yükleyeceğimiz klasör.
ekresimler: Yazılarımız içinde okuyucularımızla paylaşmak istediğimiz resimleri yükleyeceğimiz klasör.
resimler: Sistemin tasarımı için gerekli resimlerin yükleneceği klasör.

YGünlük Dizini

Fonksiyon ve Ayar Dosyaları ile Bileşenlerin Seçilmesi

Sistemimizi oluştururken bazı temel fonksiyon dosyalarımız olacaktır. Bununla birlikte programcılar tarafından kabul görmüş, işlerimizi hızlandıracak, sistemimizi güçlendirecek bir takım hazır kütüphanelerden/betiklerden faydalanacağız. İşte bu tür dosyaları bilesenler klasöründe tutacağız. Bu klasör sürekli güncellenecektir çünkü proje sırasında yeni fonksiyonlar yazdığımızda yine bilesenler klasörüne koyacağız. Bilesenler klasörü için ilk aklıma gelenler dosyalar şöyle;

  • Her şeyden önce bir ayar dosyamız olacak ve sitenin adresi, tam yolu, veritabanı gibi bilgileri bu dosyaya yazacağız. Dosya ismi olara ayar.php diyelim.
  • Projemiz geliştikçe veritabanını daha da geliştireceğiz. Ben yazdığım sistemlerde her zaman vt.sql adında bir metin dosyası yaratırım ve veritabanı yapısını sql sorgusu halinde buraya kaydederim. Bir çeşit yedek gibi düşünebilirsiniz. Tek farkı içeriği değil sadece iskelet yapısını kaydederim. Bu düşünceden yola çıkarak vt.sql dosyasını da bileşenlerimize ekliyoruz.
  • PHP ile MySQL veritabanını yönetmek için ezSQL veritabanı sınıfını kullanacağız. Bu kütüphanenin kullanımını şurada detaylı bir şekilde anlatmıştım.
  • Yönetim panelinden yazı yazarken dosya ve resim yükleme işlemi yapmak istediğimizde eburhan’ın yazmış olduğu eBurhan Upload Class’ı kullanacağız.
  • AJAX için jquery kütüphanesinden faydalanacağız.
  • Günlüğümüzde yazıları yazarken zorlanmamak için görsel yazı düzenleyici olarak TinyMCE kullanacağız.
  • Malum bizim fonksiyon dosyalarımız olacak ve sitemize girildiğinde bu fonksiyon dosyaları çağırılacak. Bunun için temel olarak yazi-fonk.php, sayfa-fonk.php, yorum-fonk.php, guvenlik-fonk.php ve diger-fonk.php dosyaları oluşturmayı planlıyoruz. Elbette ki ilerledikçe gereksinim duyduğumuz yeni dosyalar da olacaktır. Yeri geldiğinde yeni dosyalar oluşturabiliriz.

Bileşenlerimizi toparladığımızda bilesenler klasörümüzün şu şekli aldığını görebiliriz.

YGünlük Bileşenler

Not: Sizin de eklemek istediğiniz ve tavsiye edebileceğiniz bileşenler varsa lütfen yorumunuzda belirtiniz. Önermiş olduğunuz fonksiyonların isimlerini makaleye ve dosyaları en sonda paylaşmış olduğum dosyalar ekleyeceğim. Yukarıdaki resmi malesef hemen değiştirmeyeceğim çünkü malum zahmetli bir olay.

Bölüm Özeti

Sizi uzun yazılarla sıkmak istemiyorum. Bu nedenle Kendi Günlüğünü Kendin Yaz yazı serisinin ilk bölümünü burada sonlandıralım ve şuana kadar yaptıklarımızı özetleyelim.

  • Öncelikle günlüğümüze bir isim verdik.
  • Kapsamını ve yeteneklerini belirledik. Sade bir günlük fikrinden yola çıktığımız için her şeyi en basit haliyle düşündük.
  • Dizin yapısını oluşturduk.
  • Günlüğümüzde kullanacağımız fonksiyon ve ayar dosyaları ile bileşenleri belirledik ve kabaca toparladık.

Her programcının kendine göre bir ilerleme yöntemi vardır. Benimki yukardaki şablonu oturttuktan sonra yönetim panelinden devam etmektir. Bu nedenle bir sonraki yazıda yönetim panelini oluşturmayı anlatacağım.

Yazıda oluşturmuş olduğum ygunluk dizinini buradan indirebilirsiniz.

Gelecek yazıda görüşmek üzere…

Not: Bu yazıma vereceğiniz yorumlar çok önemli. Gözümden kaçan hususlar olabilir. Ayrıca yeni fikirlerle YGünlük‘ü daha sağlam hale getirebiliriz. Eğer bir güncelleme yaparsam yazının en üstünde bunu duyururum.

Not 2: Sistemi yazmak için gerekli programları konusunda buradaki yazıma bakabilirsiniz.

Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer