Perşembe, 29 Eylül 2011

HMVC ile Admin ve Public Erişim Ayarları

 

CodeIgniter ile HMVC kullanmaya başladığınızda yapmanız gereken bir ayar da routes ayarıdır. Sitenin admin ve public kullanım ayarlarını application/config/routes.php üzeindeki ayarları kullanarak yapalım.

İlk Önce .htaccess ayarlarıyla index.php’yi adres satırımızdan kaldıralım ve config.php dosyamızı düzenleyelim.

RewriteEngine on

RewriteCond $1 !^(index.php|robots.txt|system|application|user_guide)

RewriteRule ^(.*)$ index.php/$1 [L]

Şimdi ise application/config/config.php dosyamızdan index.php’yi kaldıralım:

$config['index_page'] = '';

Bundan sonra routes dosyamızda bazı ayarlar yapmalıyız. application/config/routes.php dosyasını açalım. Bu dosyada "default_controller" değişkeni sitemiz ilk açıldığında hangi controller dosyasının yükleneceğini gösterir. Bu yüzden bu değişkeni pages modülüne yönlendirmekte fayda var. Pages modülümüzün application/modules/pages sayfasında olduğunu kabul edersek, şunu yazmalıyız:

$route['default_controller'] = "pages";

Şimdi statik sayfalarımıza girişi düzenleyelim. Örneğin http://siteadresi/hakkimizda, http://siteadresi/tarihce adreslerine giriş istenildiğinde, site adresinden sonra girilen kelimeyi pages modülünde, page fonksiyonuna gönderip çağırmamızı istediği sayfayı bir değişken olarak alabiliriz. application/config/routes.php dosyasında:

$route['([a-zA-Z_-]+)'] = 'pages/page/$1';

Page dosyasının controller sayfasında ise gelen bilgiyi değişken olarak şöyle alırız:

function page($var=NULL){

 $page = ($page == NULL) ? 'anasayfa' : $var;

}

Yukarıda yaptığımız işlemde, eğer hiç birşey girilmediyse yani sadece http://siteadresi/ geldiyse, $page değişkenine "anasayfa"yı tanımlıyoruz.

Eğer iletişim, galeri vs. sayfaları için farklı bir fonksiyon tanımlamak istiyorsak routes ayarlarımız şöyle olmalıdır:

$route['(iletisim|urunlerimiz|galeri)'] = 'pages/$1';

Yukarıdaki kod ile adres satırına iletisim, urunlerimiz ve galeri girilirse pages modülünde iletisim, ürünlerimiz ve galeri için ayrı olarak tanımlayacağımız fonksiyonları çağrılır. Örneğin:

function iletisim(){

 echo 'iletisim sayfası';

}

Routes kuralı belirlerken dikkat etmeniz gereken tek şey sırasıdır. Hangi kurala göre daha önce ayrılma yapılmasını istiyorsak, o routes kuralının daha üst sırada olması gerektiğidir:

$route['(iletisim|urunlerimiz|galeri)'] = 'pages/$1';

$route['([a-zA-Z_-]+)'] = 'pages/page/$1';

Buraya kadar HMVC modülü kullanan sitenin public site erişimini tamamladık. Şimdi Admin erişimini düzenleyelim. Öcelikle dizin yapımızın şöyle olduğunu kabul edelim:

/application/modules/pages
/application/modules/pages/controller/pages.php //Web tarafı
/application/modules/pages/controller/admin.php //Admin tarafı
/application/modules/pages/models/
/application/modules/pages/views/

İlk iş admin olarak siteye login ve logout olalım. http://siteadresi/admin adresi ile siteye girildiğinde login formu ekrana gelmelidir. Bu nedenle login ve logout controller'ını modül yapısı dışına almamızda fayda vardır. Routes.php dosyasında yapacağımız ayar şöyle olmalıdır:

$route['admin'] = "admin";
//Admin için Login | Logout tanımlama
$route['admin/(login|logout)'] = "admin/$1";

Şimdi yukarıdaki dizilişe göre adres satırında admin isteği ile /application/modules/pages/controller/admin.php controller dosyasını çağıracak ayarı yapalım. Routes ayarı:

$route['admin/([a-zA-Z_-]+)'] = "$1/admin";

Böylece yukarıda yaptığımız işlemde adres çubuğuna http://siteadresi/admin/pages adresi girildiğinde admin controller dosyamız çağırılacaktır.

Pages modülünün admin controller sayfasının altındaki metodlarına erişimi için ise aşağıdaki routes ayarını yapmalısınız:

$route['admin/([a-zA-Z_-]+)/(:any)'] = "$1/admin/$2";

Böylelikle adres çubuğunda http://siteadresi/admin/pages/categories tanımlandığında admin controller sayfanızın categories fonksiyonunu çağıracaktır. Toparlarsak, yukarıda anlatılan tüm işlemlerden sonra application/config/routes.php dosyamızın son hali şöyledir:

$route['default_controller'] = "pages";

$route['(iletisim|urunlerimiz|galeri)'] = 'pages/$1';
$route['([a-zA-Z_-]+)'] = 'pages/page/$1';

$route['admin'] = "admin";
$route['admin/(login|logout)'] = "admin/$1";
$route['admin/([a-zA-Z_-]+)/(:any)'] = "$1/admin/$2";
$route['admin/([a-zA-Z_-]+)'] = "$1/admin";

Okan CİVELEK
http://www.okanck.com/

Yorumlar

"Routes kuralı belirlerken dikkat etmeniz gereken tek şey sırasıdır. Hangi kurala göre daha önce ayrılma yapılmasını istiyorsak, o routes kuralının daha üst sırada olması gerektiğidir: "

bunu anlayamadım. Biraz açabilir misini?

@Hasan: Bu dosyadaki routes ayarları öncelik sırasına göre dizlir. Yani, statik sayfaları kontrolü, bir alttaki satırla yer değiştirseydi, site hiç statik sayfaları görmeden hep diğer sayfalara yönlenecekti.

Routes ayarlarında şöyle birşey tanımladığını varsayalım.

$route['(iletisim)'] = 'pages/iletisim'

bide şöyle birşey yazdın diyelim

$route['([a-zA-Z_-]+)'] = 'pages/page/$1'; 

burada şu işlem yapılıyor.

üsttekine siteadi.com/iletisim yazıldığında controller dosyasındaki iletisim fonksiyonu çağırılacak.  alttaki tanımlamada ise siteadi.com/herhangibirşey yazıldığında ise controller dosyandaki page fonksiyonu çağırılıacak. eğer iletişim tanımlamanı altta yapmış olsaydın. siteadi.com/iletisim yazıldığında hiç birşey olmayacaktı. yani iletisim fonksiyonunu çağırmayıp page fonksiyonuna gidecekti. iletisim fonksiyonunu yukarda tanımladığın zaman iletisim fonksiyonunu çağırır. Umarım açıklayıcı olmuştur.

Yorum Ekle