CodeIgniter3++

Kategori: Codeigniter, Php, Referanslar
Tarih: 16th Mart 2015

Codeigniter framework geliştiricileri 2.2. versiyondan sonra artık geliştirme yapmayacaklarını duyurmuşlardı. 2015 Ocak itibariyle bu karar değiştirilmiş. CI3 versiyonu RC sürümleriyle yayınlanmaya başladı. Şuan RC3 yayında. Bende şimdiye kadar yaptığım çekirdek geliştirmelerini ve bazı kütüphaneleri ekleyerek bir temel proje oluşturmaya karar verdim. Bu proje aşağıdaki ekleri ve geliştirmeleri içermektedir. Projeyi buradan indirebilirisiniz.

 

 

1- Serbest Kütüphane

Çeşitli işlermler için yazılmış fonksiyonlar bu kütüphaneye eklendi. Bu kütüphane CI yüklenmeden önce yüklenir ve CI’dan bağımsız olarak uygulamanın istenilen yerinde kullanılabilir. Akla hemen neden helper geliştirilmedi de böyle bağımsız bir kütüphane geliştirildi sorusu gelecektir. Bunun kütüphanedeki bir çok fonksiyon için farklı cevapları var. Bir örnek verelim. Flood kontrol fonksiyonu. Bu, sisteminizi flood saldırılarına karşı korumak için yazılmış bir fonksiyondur. Bu fonksiyon helper içinde tanımlansa idi bir saldırı bile olsa bu fonksiyonu kullanmak için CI’ ın yüklenmesi gerekecekti. Yani saldırılarda bile CI yüklenecekti. Zaman kaybını öncelemek için flood_kontrol fonksiyonu CI yüklenmesinin önüne alınmıştır.

 

2- Güvenlik Geliştirmeleri

  • İlk güvenlik geliştirmesi flood kontrolüdür. Sistem flood saldırılanı tespit ederek uygulamanızın yüklenmesini durdurur. Bu konu ile ilgili ayarı “./kutuphane.php:157” dosyası içinden yapabilirsiniz.
  • Oku fonksiyonu. Serbest kütüphane içinde bulunan bu fonksiyon istenilen modda okuma yapıp okuduğu veriyi “sql enjeksiyon”, “xss saldırısı” gibi güvenlik açıklarından temizler. Bunun yanı sıra faklı kaynaklardan istediğiniz veriyi okumanıza yardımcı olur. Ek olarak Yaz fonksiyonunuda bununlar birlikte inceleyebilirsiniz.
  • Captcha yani resimdeki karakterler koruması. CI’ın mevcut fonksiyonlarının üzerine geliştirilen bu koruma ile sayfanız içersinde herhangi bir yere “<div id=’captcha-alan’ w=’300′ h=’35’></div>” kodu ile istediğiniz boyutta bir captcha oluşturabilirsiniz. Cache kullansanız bile uygulama bu alana dinamik olarak captcha resmini yerleştirip kullanıcıya “captcha” anahtar kelimesi ile resimdeki karakterleri içeren stringi session olarak atayacaktır.
  • Form ID. Bu koruma ile uygulama tarafından form_open() fonksiyonu ile oluşturduğunz her form içine, o form için özel oluşturulmuş bir ID eklenir. Bu şekilde form kopyalanması, formların offline olarak doldurulması, farklı sitelere sizin formunuzun gömülmesi gibi işlemlerin önüne geçmiş olursunuz. Çekirdek geliştirmesi ile “$this->form_validation->run()” kodunu çalıştırırken Form ID’niz de otomatik olarak kontrol edilecektir. ID doğrulanamaz ise kullanıcıya hata sayfası gösterilecek ve log dosyasına hata yazılacak.

 

3- Çoklu ve Dinamik Dil Desteği

Bu destek sayesinde veritabanınızdan dinamik yüklediğiniz dil bilgileriyle uygulanızı istediğiniz her dilde sunabilirsiniz. Sistem dil bilgisini url ‘in ilk segmentinden tespit eder. Bu dil bilgisi iki harfli olmalıdır. “http://siteniz/tr/” yada “http://siteniz/en/” gibi. Desteklediğiniz dilleri veritabanında dil tablosuna eklemelisiniz. Ayrıca dil klasöründe “<modül ismi>_lang.php” dosyası içine dil verilerinizi eklerseniz, sistem dili tespit ettikten sonra lang dosyasını otomatik yükleyecektir. Mesela “http://siteniz/tr/panel/sinif/method” adresine gitmek istediğinizde sistem turkce klasöründeki panel_lang.php dosyasını yükleyecektir. Siz view içerisinden yeni bir yükleme işlemi yapmaya gerek olmadan istediğiniz dili kullanabilirsiniz.

 

4- Modüler Yapı

CI üzerinde modüler olarak sisteminizi geliştrimenizede izin verilmiştir. Uygulama kullanıcının geldiği url den hangi modüle gitmek istediğiniz tespit eder ve ilgili yüklemeleri ona göre yapar. Örneğin “http://siteniz/tr/panel/sinif/method” adresine gitmek istediğinizde sistem “./tema/panel/” adresindeki temayı dikkate alacak ve dil olarak da türkçe dilini yükleyecektir. Site ve Panel isminde iki adet modül olduğu varsayılmıştır.  Bu konu ile ilgili ayarı “./kutuphane.php:123” dosyası içinden yapabilirsiniz.

 

5- Tema Motoru

CI yapılan geliştirmelerle kullanıcının farklı modüller ve diller için farklı temlar kullanmasına ve her modül için birden fazla tema yükleyebilmesine izin vermektedir. Şöyle ki CI bir temanın seçilebilmesi için sistem ikiparametreyi dikkate almaktadır. İlki modül ismi. “./tema” klasöründe modül isimleriyle aynı isimde ve sayıda klasör bulunmalıdır. “./tema/panel” ve “./tema/site” gibi. Sistem gelen url’e bakarak tema klasörü içerisinde hangi klasörü dikkate alacağını otomatik seçecektir.  “http://siteniz/tr/panel/sinif/method” adresi için “./tema/panel/” i tema klasörü olarak kabul etmek gibi. İkinci parametre ise veritabanında yüklenecek tema ayarının tutulduğu kayıt. Veri tabanında ayar tablosu altında ilgili modül  için hangi temanın yükleneceği ayarı tutulur. Bu kayıda erişmek için anahtar kelime “<modül ismi>_tema” şeklindeki kayıt adıdır (panel_tema yada site_tema gibi). Karmaşık görünse de değil. Hemen bir örnekle anlatalım.

 

Tema klasörünün ağaç yapısının aşağıdaki gibi olduğunu kabul ediyorum.

/tema

—–/panel
———-/varsayilan
———-/panel_icin_yeni_tema

—–/site
———-/varsayilan
———-/site_temasi2

 

Veri tabanındaki ayar tablosunda da aşağıdaki veriler vardır.

id dil ad veri aktif
1 0 site_tema varsayilan t
2 0 panel_tema site_temasi2 t

 

“http://siteniz/tr/panel/sinif/method” adresine gitmek isteyen bir kullanıcıya “./tema/panel/varsayilan/views” klasörü view klasörü olarak gösterilecektir. Bir başka deyişle $this->load->view(‘deneme’); komutunu yazdığımız bir sayfada yukarıdaki adres için gelen kullancıya “./tema/panel/varsayilan/views/deneme.php” sayfası view olarak yüklenecektir.

 

Her bir tema klasöründe css, js, less ve view klasörleri varsayılan olarak olmalıdır. Daha fazla gerekirse resim, dosya gibi klasörler de ihtiyaca göre temayı kodlayan tasarımcı tarafından eklenebilir. Ayrıca views içindede varsayilan adında bir klasör olmalıdır. Bu klasör bir sonraki paragrafta anlatılacak olan js, css ve less dosyaları içinde php kodu yazabilmemiz için gereklidir. Saydığımız dosyalar direk statik bir dosya olarak eklenmez. Bunun yerine CI üzerinden yüklenir. Bu klasör eski bir temadan direk kopyalanabilir. Peki ama neden js dosyasında php kodu yazmak isteyelim? En basitinden dil desteği için. Js dosyasındaki string ifadeleri CI dil fonksiyonu aracılığıyla yazdırırsak sistem dili otomatik yüklediği için bizim istediğimiz dildeki js dosyasınıda otomatik olarak oluşturacaktır. Standart bir tema dosyasında olması gereken yapı aşağıdadır.

 

tema_adi
—–/css
—–/js
—–/less
—–/views
———-/varsayilan
—————/css.php
—————/degiskenler.php
—————/dosya.php
—————/javascript.php
—————/less.php
Bu yapıyı oluşturduktan sonra istediğimiz dosyamızı istediğimiz isim ile ekleyebiliriz. Herşey artık bizde. Mesela css içerisine sitil.css js icerisinede kutuphane.js, less içerisinede sitil.less dosyasını oluşturduğumuzu düşünelim. Bu dosyalarımızı view sayfamıza aşağıdaki gibi ekleme yapabiliriz.

 

<!– Tema css kütüphanesi –>
<?=css(‘sitil.css’) ?>

<!– Tema less kütüphanesi –>
<?=less_file(‘sitil.less’) ?>
<!– .less dosyalarını çalıştıracak js kütüphanesi –>
<?=less() ?>

<!– Tema js kütüphanesi –>
<?=javascript(‘kutuphane.js’) ?>

 

Son olarak bu dosyaların içerisinde php kodu kullanmayı örnekleyelim:


function facebook_giris()
{
var on = $( "#beni_hatirla:checked").length == 1 ? 'on' : '';
alert("<?=lang('hatirla_mesaj') ?>");
window.location = "<?=url('panel')?>anasayfa/facebook?beni_hatirla="+on;
}

CI less ile uyumludur.

 

6-Form elemanları

Form elemanları için yine önemli geliştirmeler yapılmıştır. Buradan bu konu hakkındaki yazıya ulaşabilirisiniz. Bunların yanı sıra çoklu dosya yükleme ve zengin metin editörüde kullanabilirsiniz. Örnek kod aşağıdadır.


<?php angular_editor('aciklama', '<b>html</b> Test') ?>

<?php coklu_dosya_yukleme('resimler', '', dosya_turu('site', 'id')) ?>

“dosya_turu(‘site’, ‘id’)” bu fonksiyon bir numara geri döndürür. coklu_dosya_yukleme(,,) fonksiyonunun 3. parametsi olarak fonksiyona gönderilir. Bu parametre ile çoklu dosya yükleme aracı dosyaları hangi dizine yükleyeceğini belirler.  Örnekteki dosyalar “./dosya/site/” klasörü altına yıl/ay/gün dizini takip olarak yüklenecektir. Dosya türleri hakkındaki ayarlamaları “./kutuphane.php:992” dosyasından yapabilirsiniz.

 

7- Kullanıcı girişi

Örnek olarak bir tema ve kullanıcı girişi tasarlanmıştır. Tasarlanan tema tüm mobil cihazlarda da tam uyumlu çalışmaktadır. Ayrıca kullanıcının yetkili olup olmadığı kontrol edilip kullanıcı girişi yapmadan panel klasörü altındaki hiç bir sayfaya giriş yapmasına izin verilmemektedir. Sadece giriş ekranına erişebilmesi için “Anasayfa” controller’ına ve js, css, less dosyalarına erişebilmesi içinde proxy klasörüne izin verilmiştir. Bu konu ile ilgili ayara “.\application\config\config.php:7” dosyasından ulaşabilirsiniz.

 

8- Raporlamalar

Ek kütüphaneler ile CI üzerinden Word, Excel ve Pdf raporlar alabilmeniz sağlanmıştır. Bunlarla ilgili birer örnek “http://siteniz/tr/panel/rapor/excel”, “http://siteniz/tr/panel/rapor/word” ve “http://siteniz/tr/panel/rapor/pdf” adresinde bulabilirsiniz.

 

9- Cache

Cache kütüphaneleri de daha kolay bir cache yönetimi için geliştirilmiştir. Bu şekilde cache yapılan dosya url dizini ile aynı şekilde cache dosyasında tutulmaktadır. Dosya adında da dil bilgisi ayrıca indexlenmiştir.

 

10- Geliştirici ayarlamaları ve Özel ayarlar

Geliştirme esnasında ve sistem kullanıma başladıktan sonra sistemi hızlandırma adına bazı ayarlar size bırakılmıştır. Bu ayarları sabit tanımlamaları ile “./kutuphane.php:32” den itibaren bulabilirsiniz. Örneğin sistem dil bilgisini her seferinde yeniden veri tabanından okumak yerine bir sefere mahsus okuyup sizin “VERI_CACHE” sabiti ile belirlediğiniz veri kaynağına yazar. Sonraki her ziyaretçi için bu kaynaktan okur. Burada buna benzer bir sürü ayar bulabilirsiniz.

 

11- Ek kütüphaneler

CI içerisine sizin kullanımızı kolaylaştıracak bir sürü ek kütüphane konulmuştur. Jquery, JquqryUI, Bootstrap, Bootstrap notify, Openlayers, Less… Bu kütüphaneler view dosyası içerisine aşağıdaki koldlarla eklenebilir.


<?=jquery() ?>

<?=bootstrap() ?>

<?=bootstrap_notify() ?>

<?=openlayers() ?>

<?=ui() ?>

<?=angular() ?>

<!-- Framework varsayılan js kütüphanesi -->
<?=javascript() ?>

<!-- Framework varsayılan css kütüphanesi -->
<?=css() ?>
<!-- Tema css kütüphanesi -->
<?=css('sitil.css') ?>

<!-- Framework varsayılan less kütüphanesi -->
<?=less_file() ?>
<!-- Tema less kütüphanesi -->
<?=less_file('sitil.less') ?>
<!-- .less dosyalarını çalıştıracak js kütüphanesi -->
<?=less() ?>

<?=google_analytics() ?>

 

12- Facebook API

CI içerisine Facebook API v4.4 de eklenmiş ve kullanıcı girişi için örnek bir kütüphane tasarlanmıştır. Paneli inceleyerek detayları görebilirsiniz.

 

Not:

  • SQL dosyası kök dizindedir. Veritabanı olarak Posgresql 9.1.15 kullanılmıştır. Kendi Veri Tabanı Yönetim Sisteminize göre sql kodlarını revize etmeniz gerekebilir. Veritabanı bağlantı ayarlarınada “./kutuphane.php:96” dosyasından erişebilirsiniz.
  • Sistem varsayıla olarak APC cache kullancak şekilde planlanmıştır. APC desteklemeyen sistemler için VERI_CACHE sabitine session değeri verilebilir. “./kutuphane.php:56”
  • APC durumunun incelenmesi için “http://siteniz/apc.php” adresini ziyaret edebilirsiniz.
Yorumlar: 2 » tags: , , , ,
Optimization WordPress Plugins & Solutions by W3 EDGE