Codeigniter Dersleri – 8 – Kütüphane Oluşturma
Daha önce menümüzü basitçe oluşturmuştuk. Şimdi birazda kütüphanelerden bahsedeceğiz. Örnek olarak menümüzü kütüphaneye koyacağız.
CodeIgniter\application\libraries dizini altına MyMenu.php dosyası oluşturuyoruz. İçerisine aşağıdaki kodları ekliyoruz:
Burada kütüphanemiz diğer codeigniter class ve kütüphanelerine erişiyor. Örneğin url helper kullanıyoruz. Url helper bizim daha kolay url ler yazmamızı sağlıyor. Örneğin aşağıdaki iki kod aynı anlama geliyor.
Menümüzde <ul> ve <li> kullandık, daha sonra css dersimizde bunları modifiye edeceğiz. Şimdilik çalışması bizim için yeterli.
CodeIgniter\application\controllers altındaki pizza.php dosyamızdaki index() ve order() fonksiyonlarına kütüphanemizi include edip yeni menü objesi oluşturuyoruz ve show_menu() fonksiyonunu çağırıp dönen değeri pizza_view dosyasına yolluyoruz. Şu şekilde
Şimdi CodeIgniter\application\view klasörü altındaki pizza_menu.php dosyamızı şu şekilde tekrar güncelliyoruz.
Sayfamızı tekrar test edebiliriz. Menümüz çalışır durumda olması gerekmektedir.
Eğer anlamakta zorluk çekiyorsanız. Önceki derslere tekrar göz atıp, anlamadığınız yerlerde bana yorum yazabilirsiniz.
Bunlara da Göz Atmak İsteyebilirsiniz.
<<< Önceki: Codeigniter Dersleri – 7 – Formlara Giriş
Sonraki: Codeigniter Dersleri – 9 – Header, Footer Dosyaları ve Verimli Yapı Oluşturma >>>
Merhabalar hocam sizin burada kullanmış olduğunu
$obj =& get_instance();
bu komut ile $obj değişkenine aktarmanızdaki amaç $this yerine $obj yi kullanmak gibi görünüyor. Tam olarak da anlayamamıs olabilirim. Ama sizin burada aktarmanızdaki amacınız nedir ve bize ne gibi bir faydası vardır?
Evet $this yerine $obj kullanıyoruz. Codeigniter bize model, view ve controller dosyalarımızda $this ile direkt olarak süper class a erişimimize izin veriyor. Ancak bunun dışındaki dosyalarda (yukarıdaki örnekte olduğu gibi) bu izin yok.Bu süper class ı kullanabilmek için önce bunu bir değişkene atamamız gerekiyor. get_instance() bize codeigniterın ana kaynaklarını kullanabilmek için obje döndürüyor. Biz bunu referans ile alarak kopyası yerine orjinalini kullanmış oluyoruz.
Bilgilendirmeniz için teşekkür ederim.
Hocam ben yeni basliyom bu codeigntere ondan bir sey sormak istyom yukarida siz hem index() hemde order() fonksiyinlarinin icinde ayni seyleri load etmisinz buna ne gerek niye hem index hemde orders fonksiyonun iicnde load etyoruz birinin icnde load etsek yetmezmi ?
Ege, Biz bir controller classını çağırdığımızda içindeki fonksiyonlardan sadece birisi çalışıyor. Örneğin sorunuzda ya index() fonksiyonunu yada order() fonksiyonunu çalıştırıyoruz. Böyle olunca her seferinde menümüzü görüntüleyebilmek için tekrar menü kütüphanemizi load edip show_menü() fonksiyonunu çağırmamız gerek. Sizin dediğiniz gibi ve bu örnekte olduğu gibi, eğer bir kütüphane veya helper bütün fonksiyonların içinde çağrılıyorsa, Bu fonksiyonları construct içinde yazmak daha mantıklı olacaktır. Zaten bu projeyi geliştirmeye devam ederseniz. Her fonksiyonun içinde tekrar tekrar yazmayacaksınız aynı şeyleri. Construct içinde bir kere yazmanız yetecektir. Çünkü o dosyaya girildiğinde class mantığından dolayı önce construct sonra ilgili fonksiyon çalışacaktır.
pizza_menu.php de en son güncellemeyi yapınca
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: menu
Filename: core/Loader.php(742) : eval()'d code
Line Number: 1
hatasını aldım. Defalarca kontrol ettim kodda bir yanlışlık yok. Konfigürasyonda mı bir hata var acaba
=$menu ?>
yerine
kullanmayı deneyebilirsiniz. Eğer aynı hatayı alırsanız, library de bir sorun olduğunu düşünebiliriz.
yazdım yine aynı hatayı verdi. Library için yukarıdaki kodun aynısını kopyala yapıştır yazıyorum sorun aynı.
menu değişkeni tanımlanmamış görünüyor acaba belirli bir konfigürasyonda ayarlama mı yapmalıyız.
Nahita;
application altındaki autoload.php içerisindeki iki satırı şu şekilde ayarlayarak deneyebilirsin, bunun haricinde herhangi bi konfigürasyon olacağını düşünmüyorum.
$autoload['libraries'] = array('session','database');
$autoload['helper'] = array('url','form');
Bunun haricinde siteden kaynak kodlarını indirip, denemeni tavsiye ederim. Bazı derslerde kaynak kodlarını paylaştım. Örneğin 20. derste kodları indirebileceğin bölüm bulunmakta.
Teşekkür ederiz, yanlız bir sorum olacak.
menu değişkenini de data dizisi içine attık yukarıda. o data pizza_order’a da gidiyor. Onu farklı isimli bir diziye $menu_data[‘menu’] gibi pizza_order view’ine fazladan bir şey göndermememize yardımcı olur mu, yoksa yukarıda ki gibi mi kullanmak daha doğru?
Yahya haklısın, tabi ki order sayfasına menüyü göndermenin anlamı yok, yukarıdaki derste sadelik açısından bu şekilde kullanıldı. Ancak senin söylediğin, menü sayfasına menü değişkenini, order sayfasına diğer bilgileri göndermek hem daha mantıklı, hemde performans açısından daha iyi.
İkinci sorunuza gelince, normalde index yerine farklı fonksiyonlar içinde çalışması lazım, eğer ikinci link te çalışmıyorsa muhtemelen hata başka noktadadır. Çünkü ikinci projemizde kullanılan linkin aynısı. Soruyu daha ayrıntılı sorabilirseniz çözüm bulabiliriz.
bir soru daha.
ben örneklerinizdeki gelişimi saklamak adına farklı fonksiyonlar üzerinden index alıyorum, örneğin buradaki controllerda index fn’nin bendeki karşılığı index3.
MyMenu’nun ürettiği linkler hatalı yol veriyor, muhtemelen ben bir yerde hata yaptım.
verdiği çıktı:
http://localhost/fwtest/pizza/index3
http://localhost/fwtest/pizza/order
ancak bu yollara tıkladığımda bulunamıyor diyor çünkü index.php eksik.
Sebep ne olabilir acaba?
admin, yanıtlar için teşekkür ederim.
İkinci soru için .htaccess ile çözüm buldum. madem index.php/ göstermiyor ben de tamamıyla kaldırırım dedim.
RewriteEngine on
RewriteBase /
# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) /fwtest/index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /fwtest/index.php/$1 [QSA,L]
Doğru yaptığımı sanıyorum ama yine de onayın içime su serper :)
Yahya, .htaccess kullanmak link görünümü ve seo için iyidir. Ancak yazdığınız htaccess tüm durumlar için çalışıyor mu, bu da önemli. Yani ileride başka url ler için de doğru çalışacağına eminseniz kullanabilirsiniz. Yazdığınız kodu denemedim ancak urlden 2,3 değişken gönderdiğinizde de çalışıyorsa rahatlıkla kullanabilirsiniz.
Eğer index.php görünmüyorsa şunu kontrol edebilirsin;
\application\config altındaki config.php içerisindeki $config[‘index_page’] = ‘index.php’; şeklinde yazılı olduğuna emin olun.
Hocam @Nahita arkadaşımızdaki hata bendede çıktı dediklerinizi yaptım fakat sorunu çözemedim “A PHP Error was encountered” hatası alıyorum.
Mirza,
Kaynak kodlarını indirip çalıştırdığında da sorun devam ediyor mu?
Benim sorunum var eğer yardımcı olursanız sevinirim.Veritabanından kategorileri listelemek istiyorum ama Aşağıdaki hayatı alıyorum.
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: kategoriler
Filename: views/index_view.php
Line Number: 10
——————————
A PHP Error was encountered
Severity: Warning
Message: Invalid argument supplied for foreach()
Filename: views/index_view.php
Line Number: 10
——————————
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: kategorilerin
Filename: views/index_view.php
Line Number: 15
——————————
A PHP Error was encountered
Severity: Notice
Message: Trying to get property of non-object
Filename: views/index_view.php
Line Number: 15
——————————
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: kategorilerin
Filename: views/index_view.php
Line Number: 16
——————————
A PHP Error was encountered
Severity: Notice
Message: Trying to get property of non-object
Filename: views/index_view.php
Line Number: 16
———————————
Bu benim Model sınıfım:
class index_model extends CI_Model{
function __construct()
{
parent::__construct();
$this->load->database();
}
function kategoriler()
{
// Select baslik from kategori
$this->db->select(“id”,”baslik”);
$this->db->from(“kategori”);
$query=$this->db->get();
//echo $this->db->lastquery();
// print_r($query->result);
return $query->result;
}
}
?>
————————————————–
Bu da kontrol sınıfım:
load->model(‘index_model’);
$kategorilerim[‘kategoriler’]=$this->index_model->kategoriler();
/// şimdi index_view de kategorileri listeliyecem
$this->load->view(‘index_view’,$kategorilerim);
}
}
——————————————–
Bu da view sayfam :
<?php echo 'Kategorilerin Listesi'.'’; ?>
id;
echo $kategorilerin->baslik.””;?>
——– Yardımcı olursanız çok teşekkür ederim hocam kolay gelsin
selamlar hocam library içerisindeki dosyadan database e erişme imkanımız var mı ? yani modaldaki dosyayı oraya gömüp orda işlem yapabilir miyiz? iyi günler…
Yorum Bırakın!
En Son Yazılanlar
Codeigniter Dersleri
Kategoriler
Teknoloji Haberleri
Android Dersleri
Arşiv
Sitemizin QR Kodu
Yeniliklerden İlk Sizin Haberiniz Olsun
KodMerkezi.Net Facebookta
En Çok Okunanlar
En Son Aranan Kelimeler
En Çok Oy Alanlar
Etiket Bulutu
İlginizi Çekecek Siteler
Arşiv
Yönetim
En Son Yapılan Yorumlar
En Çok Okunanlar