Group select box di CakePHP

Grouping di dalam select box adalah hal yang gampang ketika kita menggunakan codingan php biasa, tetapi kalau sudah masuk ke dalam codingan CakePHP kita harus banyak membaca documentation untuk teknik2nya, tickets jika ada yang pernah menanyakan hal yang sama dan tentu saja API agar kita tahu fungsi dari method yang akan kita pakai.

Jadi sekarang kita akan membuat sebuah grouping dalam select box seperti dalam gambar di bawah ini : [caption id=“” align=“alignnone” width=“217” caption=“CakePHP Group Select”]CakePHP Group Select[/caption]

Di dalam contoh diatas gwa menggunakan 3 buah table di antaranya table majors ( jurusan ), table faculties ( fakultas ) dan table levels ( untuk pembagian apakah dia D3/S1 ). Hal pertama yang harus kita lakukan adalah men-query isi table dari majors ( dalam hal ini gwa menggunakan ClassRegistry karena table majors tidak ada relation dengan controller gwa ) :

1
$majors = ClassRegistry::init("Major")->find("all");

atau kalau punya relation / berada dalam controller sendiri

1
$majors = $this->Major->find("all");

Kemudian kita akan menggabungkan hasil query tersebut dan menyusunnya menjadi array yang jika kita masukkan ke dalam form helper maka akan secara otomatis menjadi select box yang tergroup. Kita akan menggunakan bantuan Set::combine untuk melakukan hal tersebut. Berikut contoh codingannya :

1
2
$majorsCombine = Set::combine($majors, "{n}.Major.id", array("%s - %s",
"{n}.Level.name", "{n}.Major.name"), "{n}.Faculty.name"); 

untuk penjelasan parameternya dapat dilihat di API CakePHP : API CakePHP

sedikit penjelasan tentang parameter yang gwa gunakan yaitu :

  • $majorsCombine Nama variable penampung.

  • Set::combine Nama method yang kita gunakan.

  • $majors Sumber data kita

  • {n}.Major.id Path pertama atau biasanya nilai dari select box kita

  • array(‘%s - %s’,‘{n}.Level.name’, ‘{n}.Major.name’) Kalau ini path kedua yang berfungsi sebagai label dari isi select box kita, jika dilihat itu isinya ada level dan major jadi nanti keluarnya ( S1 - Teknik Informatika )

  • {n}.Faculty.name’ ini nama groupnya

Selanjutnya tinggal digunakan saja di viewnya seperti ini :

1
$form->select("nama-form",$majorsCombine,null,null,"-- Pilih Jurusan Pertama --"); ?>

Penjelasannya kira-kira begini :

  • $form->select ini form helper yang kita gunakan

  • nama-form nama form helper yang kita gunakan

  • $majorsCombine sumber data

  • null,null,‘– Pilih Jurusan Pertama – parameter tambahan lagi

Semoga membantu, silakan dicoba.. kalau ga jalan, dicoba lagi, kalau ga jalan juga ya sudah terima nasih aja :D

comments powered by Disqus