Bakkal Crud PHP - İlgili ve Bağımlı Kutu / Açılır Açılan Combo

İçindekiler

Başka bir eğitimde geliştirmeye nasıl başlayacağınızdan bahsetmiştik. bakkal ile Codeıgniter PHP, sonra birkaç tane nasıl yapacağımızı göreceğiz birleşik giriş kutusu veya açılır menü birbirleriyle ilişkilidirler ve birbirlerine bağlıdırlar.

Emlak adlı bir Veritabanı ile tam bir örnek görelim, yapı aşağıdaki gibi olacaktır:

Tablo için tablo yapısı 'gayrimenkul'

 OLUMSUZ TABLO OLUŞTURMA 'gayrimenkul' (' propertyid' int (11) NOT NULL, 'userid' int (11) DEFAULT NULL, 'highdate' tarih VARSAYILAN '0000-00-00', 'özellik kimliği' int (6 ) VARSAYILAN '0', 'fiyat' ondalık (10,2) VARSAYILAN '0.00', 'açıklama' metni, 'idprovincia' int (10) VARSAYILAN NULL, 'idlocality' int (10) VARSAYILAN NULL, 'adres' varchar ( 150) VARSAYILAN NULL, 'foto' varchar (255) VARSAYILAN NULL, 'mevcut' numaralandırma ('Evet', 'Hayır') VARSAYILAN NULL) MOTOR = MyISAM AUTO_INCREMENT = 1 VARSAYILAN CHARSET = latin1; OLUMSUZ TABLO OLUŞTURMA `localities` (`city id` int (11) NOT NULL, `locality` varchar (200) DEFAULT NULL,` il id` int (11) VARSAYILAN '0') MOTOR = MyISAM AUTO_INCREMENT = 3604 VARSAYILAN CHARSET = utf8; MEVCUT DEĞİLSE TABLO OLUŞTUR `users` (` userid` int (11) NOT NULL, `name` varchar (150) NOT NULL DEFAULT '') MOTOR = MyISAM AUTO_INCREMENT = 161 DEFAULT CHARSET = latin1; MEVCUT DEĞİLSE TABLO OLUŞTURUN 'propertytype' (' propertytypeid' int (6) NOT NULL, 'propertytype' varchar (150) NOT NULL DEFAULT '') MOTOR = MyISAM AUTO_INCREMENT = 15 DEFAULT CHARSET = latin1; TABLO OLUŞTURMADIĞINDA `iller` (` idprovince` int (11) NULL DEĞİL, `il` varchar (255) COLLATE latin1_spanish_ci VARSAYILAN NULL) MOTOR = MyISAM AUTO_INCREMENT = 32 VARSAYILAN CHARSET = latin1 COLLATE_spanish_latin; 
aracılığıyla gerçekleştirebiliriz phpmyadmin aşağıdaki gibi olacak bir ilişki diyagramı:

Önceki eğitimde gördük Grocerycrud nasıl kurulur ve yapılandırılır, burada uygulamayı oluşturacağız, denetleyiciyi oluşturacağız Inmo.php

 yük-> veritabanı (); $ this-> load-> helper ('url'); $ this-> load-> model ('grocery_crud_model'); $ this-> load-> library ('Grocery_CRUD'); } genel işlev dizini () {$ crud = yeni bakkal_CRUD (); $ crud-> set_theme ('flexigrid'); $ crud-> set_table ('gayrimenkul'); $ çıktı = $ kaba-> render(); $ this-> load-> view ('immolist', $ çıktı); }}?> var13 -> 
Daha sonra arayacağımız görünümü oluşturuyoruz. Listinmo.php, CSS ve JQuery dosyaları bunları yapılandırmadan alacaktır. bakkal kabağı bu nedenle onları sadece burada listeliyoruz:
 
Web'i bir tarayıcıda yürütürken ortaya çıkan sonuç http: // localhost / pro… os / inmobi / Inmo /

id'nin data yerine sayıları gösterdiğini görebiliriz, bunun nedeni tabloların onları ilişkilendirmekle ilgili olmamasıdır, aşağıdakileri yapacağız, aşağıdaki controller'da set_table belirteceğiz.

 $ crud-> set_relation ('gorelating', 'tablerelation', 'showfield');
Örnek olarak, kullanıcı tablosunun kullanıcı adını göstermek istiyorum. Kullanıcı kimliği emlak tablosundan aşağıdaki kodu yazmam gerekecek:
 $ crud-> set_relation ('userid', 'users', 'name');
Yürütmenin bir sonucu olarak, bunun yerine bir sayı olduğunu göreceğiz. Kullanıcı kimliği bize adını gösterir.

Daha sonra alanları, illeri ve yerleşim yerlerini listeleyeceğiz.

 $ crud-> set_relation ('özellik türü kimliği', 'özellik türü', 'özellik türü'); $ crud-> set_relation ('il kimliği', 'il', 'il'); $ crud-> set_relation ('yer kimliği', 'yerler', 'yer'); 
Yürüttükten sonra göreceğiz Git kendi ilişkileri ile:

Resimler durumunda kullanmalıyız

 $ crud-> set_field_upload (alan, 'imagepath');
Bu yüzden görüntüleri kaydetmek için aynı Grocery crud dizinini kullanacağız.
 $ crud-> set_field_upload ('fotoğraf', 'varlıklar / yüklemeler / dosyalar');
Listede ilgili alanları ve kombinasyonları gösterebilsek de bağımlı değiller, il combo'da bir il seçerken mahalleler kombinasyonunun otomatik olarak aktif hale gelmesini ve o ilin mahalleleri ile doldurulmasını istiyoruz, ayrıca istiyoruz bir özellik eklediğimizde veya düzenlediğimizde bu ilişki korunur.

Komboları bağımlı kılmak için bir geri arama işlevi kullanacağız. A geri çağırmak o geri arama, polimorfizme bir alternatiftir, bu, sınıfların nasıl uygulanacağını öğrenmek için başka bir öğreticide ele aldığımız bir konuydu:

PHP ile Sınıflar ve Polimorfizm

Bir fonksiyonun parametre olarak atandığı yerde, başka bir fonksiyon, daha düşük seviyeli bir fonksiyon. A geri çağırmak bir kayıt eklendiğinde veya değiştirildiğinde harekete geçebilir. Bu yöntem, harika bir kod yeniden kullanımına izin verir.

Bir geri aramanın ifadesi denetleyicide aşağıdaki gibi olabilir.

 $ crud-> callback_add_field ('callbackname', Array (parametreler));
Bu durumda geri arama idlocalidad olacak ve fonksiyon cbklocalidades olacaktır.
 $ crud-> callback_add_field ('idlocalidad', dizi ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', dizi ($ this, 'cbklocalities')); 
Daha sonra fonksiyonu oluşturuyoruz cbklokasyonlar bu, bir kayıt eklediğimizde veya düzenlediğimizde çağrılan geri aramamız olacaktır.
 // Birleşik idlocalidades fonksiyonunu oluşturan geri çağırma cbklocalidades () {// birleşik $ combo = ''; $ fincombo = ''; // url tarafından parametre olarak gönderilmişse özellik kimliğini alırız $ idinmuebleurl = $ this-> uri-> segment (4); // $ crud = new bakkal_CRUD (); $ durum = $ crud-> getState(); // Düzenleme yapıyorsak ve özellik kimliği boş değilse if (isset ($ idinmuebleurl) && $ state == "edit") {// mülkün eyaletine ve mevcut konumuna başvururuz $ this-> db-> select ( 'idprovincia, idlocalidad') -> from ('özellikler') -> burada ('idinmueble', $ idinmuebleurl); $ db = $ bu-> db-> get(); $ satır = $ db-> satır (0); $ il kimliği = $ satır-> il kimliği; $ idlocality = $ satır-> idlocality; // Combo'yu eyaletin tüm yerellikleri ile yüklüyoruz $ this-> db-> select ('*') -> from ('localities') -> where ('il kimliği', $il kimliği); $ db = $ bu-> db-> get(); // Bulunduğumuz yerin kimliğini bulursak seçili olarak koyarız // yoksa diğer konumları foreach ($ db-> sonuç () olarak $ satır olarak yüklemeye devam ederiz): if ($ satır-> idlocalidad == $ idlocalidad ) {$ combo. = 'idlocality.' "selected =" seçili "> '. $ satır-> yerel ayar.' ';} else {$ birleşik. =' idlocality. '">'. $ satır-> yerel ayar. ' '; } uç foreach; // Yüklenen combo return $ combo'yu döndürüyoruz.$ Fincombo; } else {dönüş $ kombo. $ fincombo; }} 
Ardından, Geri Arama içinde bir sorgu işlevi olarak belirttiğimiz konumları arama işlevini oluşturmalıyız:
 // Bölgeleri sorgula işlevi searchlocalities () {// birleşik eyalet kimliğinden bir eyalet seçerken // url ile parametre olarak gönderilen eyalet kimliğini alıyorum $ eyalet kimliği = $ this-> uri-> segment (3); // Seçilen eyalete göre yerelliklere danışırım $ this-> db-> select ("*") -> from ('localities') -> where ('il kimliği', $il kimliği); $ db = $ bu-> db-> get(); // sql yanıtını bir diziye atadım $ dizi = dizi (); foreach ($ db-> sonuç (), $ satır olarak): $ dizi [] = dizi ("değer" => $ satır-> idlocality, "özellik" => $ satır-> yerellik); uç foreach; echo json_encode ($ dizi); çıkış; } 
Daha sonra komboları işleyen bir view oluşturup jquery deyimlerini dinamik olarak ekleyeceğiz.Bunun için view klasöründe adında bir dosya oluşturacağız. bağımlı_combos.php.
 
Bitirmek için görünüme gidiyoruz ve görünümü dosyayla ilişkilendiren aşağıdaki kodu ekliyoruz. bağımlı_combos.php
 load-> view ('bağımlı_combos', $ combo_setup); }?> var13 -> 

Daha sonra çalıştırırsak hem yeni bir özellik eklediğimizde hem de il ve mahalli kombinasyonların ve mahallilerin nasıl ilişkilendirildiğini düzenlediğimizde görebiliriz, illere göre değişir.

Birkaç bağımlı kombinasyon yapmak istiyorsak, bir geri çağırmak her bir kombinasyon çifti için.

Diyelim ki ülkelerimiz, illerimiz ve yerelliklerimiz var ve iller ile iller ve şehirler ile bağımlı ülkeler yapmak istiyoruz, o zaman her bir bağımlılık için bir geri arama oluşturmalıyız, örneğin:

 $ crud-> callback_add_field (il kimliği, dizi ($ this, 'cbk ili')); $ crud-> callback_edit_field ('il kimliği', dizi ($ bu, 'cbk ili')); $ crud-> callback_add_field ('idlocalidad', dizi ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', dizi ($ this, 'cbklocalities')); 
Ülkeler kombinasyonu için, bir geri çağırmak hiyerarşide birinci olduğu için başka bir combo'ya bağlı değildir.

Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave