Seperti yang sudah kita ketahui, PHPMaker memiliki property Filter pada Field yang menggunakan control Combobox atau Select Option untuk menyaring Record yang diambil dari Lookup Table tertentu. Dengan mengoptimalkan property Filter ini, maka kita sebagai Web Developer dapat menaruh data String yang berisi kriteria SQL untuk menyaring Record dari Lookup Table tadi.
Jadi, tidak semua Record yang berasal dari Lookup Table ditampilkan pada control Combobox yang digunakan oleh Field tadi. Hal ini sangat terasa manfaatnya untuk Lookup Table yang memiliki banyak (ratusan atau ribuan) Record dan ditampilkan melalui control Combobox. Selain waktu loading halaman bisa lebih cepat, maka kita dapat mengambil data yang sesuai dengan kebutuhan saja.
Tidak bisa dihindari — atau bahkan sering kali — kita harus menambahkan beberapa kondisi di dalam String Filter tadi. Sayangnya, String Filter ini harus terdiri dari satu baris String saja. Kita tidak bisa menulis code PHP dengan menggunakan block seperti if … elseif … else yang biasanya kita tulis dalam beberapa baris ke bawah.
Meskipun demikian, bukan PHPMaker namanya jika kita tidak bisa mengatasi permasalahan ini. Kita tetap bisa menambahkan beberapa kondisi dalam satu baris String Filter tadi. Untungnya, di PHP ada sintaks yang memungkinkan kita untuk mempersingkat penulisan beberapa kondisi menggunakan operator karakter tanda tanya (?) dan titik dua (:).
Selengkapnya mengenai hal ini bisa Anda baca melalui PHP Shorthand If/Else Using Ternary Operators (?:). Bagi yang belum tahu, saya sarankan agar Anda mempelajari pola penulisannya.
Oke, kalau sudah, sekarang mari kita kembali lagi kepada property Filter milik Field yang menggunakan Lookup Table tadi. Beberapa hari yang lalu, saya baru saja berhasil menemukan solusi untuk menaruh 5 (Lima) kondisi dalam satu baris String Filter tadi di salah satu Aplikasi Web yang saya bangun. Wow, keren ya! Ehm… ehm… 🙂
Jadi begini. Saya harus bisa menampilkan data dari Lookup Table tadi untuk halaman Edit untuk setiap 4 (Empat) level Pengguna yang berbeda, termasuk juga untuk halaman selain Edit dan keempat level Pengguna tadi. Itu artinya, saya harus bisa menangani 5 (Lima) kondisi sekaligus dalam satu String Filter yang hanya satu baris tadi.
Supaya lebih jelas lagi, saya berikan contoh seperti ini. Saya ingin menampilkan data dari Lookup Table yang berbeda-beda untuk lima kondisi berikut:
- Kondisi Pertama: Halaman Edit dan Level Pengguna ke-1
- Kondisi Kedua: Halaman Edit dan Level Pengguna ke-2
- Kondisi Ketiga: Halaman Edit dan Level Pengguna ke-3
- Kondisi Keempat: Halaman Edit dan Level Pengguna ke-4
- Kondisi Kelima: Selain empat kondisi di atas
Sampai di sini saya berharap Anda sudah paham. Jika belum, silahkan baca ulang dengan teliti semua penjelasan di atas sampai Anda benar-benar mengerti. Setelah itu, barulah Anda bisa melanjutkan membaca alinea di bawah ini. 🙂
Untuk mengimplementasikan kelima kondisi tadi dalam satu String Filter, tentu merupakan tantangan tersendiri yang sungguh mengasyikkan. Mengapa? Karena kita harus terlebih dulu mengetahui konsep dari penyingkatan penulisan tadi dalam satu baris, seperti yang ditampilkan pada pola penulisan berikut:
(kondisi) ? "ini jika kondisi true" : "ini jika kondisi false"
Dari kode di atas, ternyata konsepnya sangatlah sederhana. Ada tiga bagian di atas yang perlu kita cermati dengan seksama.
Di Bagian Pertama adalah pernyataan yang berisi kondisi yang akan diperiksa sebelum operator tanda tanya. Jika kondisi tadi mengembalikan nilai true, maka kembalikan String yang bernilai “ini jika kondisi true” pada Bagian Kedua. Sebaliknya, jika kondisi false, maka kembalikan String yang bernilai “ini jika kondisi false” pada Bagian Ketiga.
Bayangkanlah, dari pola yang paling sederhana itu, kita harus bisa memasukkan kelima kondisi tadi hanya dalam satu baris saja. Bagaimana caranya? Tentu timbul pertanyaan.
Nah, untuk menaruh lima kondisi tadi, maka kita harus tetap berpedoman kepada pola di atas. Artinya, untuk kondisi pertama kita menaruhnya di Bagian Pertama, sedangkan kondisi yang kedua, dan seterusnya sampai yang terakhir, kita menaruhnya di Bagian Kedua, dan hasilnya dalam posisi terbalik dari Bagian Ketiga sampai ke arah dalam Bagian Kedua.
Supaya lebih jelas, ini dia String Filter untuk mengakomodir kelima kondisi di atas tadi:
(CurrentPageID()<>"edit" || !IsUserLevel4()) ? ( (CurrentPageID()<>"edit" || !IsUserLevel3()) ? ( (CurrentPageID()<>"edit" || !IsUserLevel2()) ? ( (CurrentPageID()=="edit" && IsUserLevel1()) ? "String Filter untuk halaman Edit dan UserLevel1" : "String Filter untuk semua halaman") : "String Filter untuk halaman Edit dan UserLevel2" ) : "String Filter untuk halaman Edit dan UserLevel3" ) : "String Filter untuk halaman Edit dan UserLevel4"
Penting untuk diingat, bahwa dalam contoh kode di atas, kita harus memastikan memiliki global function yang masing-masing bernama IsUserLevel4(), IsUserLevel3(), IsUserLevel2(), dan IsUserLevel1().
Kalau kita perhatikan lagi dari kode barusan, maka itu pun sebenarnya terdiri dari tiga bagian. Jangan mau tertipu dengan kerumitan kode tadi, karena kode itu hanyalah terdiri dari tiga bagian. Sama seperti pola penulisan yang paling sederhana di kode awal sebelumnya.
Supaya lebih jelas, mari kita pecah menjadi tiga bagian, yaitu:
Bagian Pertama:
(CurrentPageID()<>"edit" || !IsUserLevel4())
Bagian Kedua:
( (CurrentPageID()<>"edit" || !IsUserLevel3()) ? ( (CurrentPageID()<>"edit" || !IsUserLevel2()) ? ( (CurrentPageID()=="edit" && IsUserLevel1()) ? "String Filter untuk halaman Edit dan UserLevel1" : "String Filter untuk semua halaman") : "String Filter untuk halaman Edit dan UserLevel2" ) : "String Filter untuk halaman Edit dan UserLevel3" )
Bagian Ketiga:
"String Filter untuk halaman Edit dan UserLevel4"
Jika Anda masih ragu atau kurang yakin, maka silahkan copy dan paste-kan kode pada Bagian Kedua tadi ke dalam Text Editor seperti Notepad++. Setelah itu, letakkan kursor mouse Anda sebelum tanda kurung pembuka yang letaknya pada awal String tersebut.
Perhatikanlah bahwa tanda kurung yang Anda klik tadi akan berwarna merah, demikian juga tanda kurung penutup di bagian paling akhir dari String tadi pun akan berwarna merah. Itu artinya, semua karakter yang berada di antara kurung pembuka dan penutup tadi adalah satu kesatuan yang dibungkus di dalam Bagian Kedua.
Setelah Anda memahami konsep ini, maka sekarang Anda dapat fokus mempelajari setiap kondisi yang berada di dalam Bagian Kedua tadi. Meskipun di sana seolah terlihat hanya 3 (Tiga) kondisi yang diperiksa, yaitu masing-masing untuk Pengguna Level ke-3, ke-2, dan ke-1, sebenarnya ada satu kondisi lagi yang diperiksa, yaitu kondisi yang kelima, yang merupakan bagian else terakhir sama seperti dalam blok if … elseif … else ….
Perhatikanlah juga, bahwa supaya kita dapat menampung lebih dari dua kondisi, maka kita harus memulai dengan melakukan pemeriksaan yang bukan kondisi yang diharapkan (negasi atau lawan dari kondisi sebenarnya). Mengapa? Jawabannya simpel saja. Supaya setelah pemeriksaan suatu kondisi, maka kita bisa merangkainya dengan pemeriksaan kondisi berikutnya, demikian seterusnya, sampai yang terakhir Anda melihat pemeriksaan kondisi tanpa negasi.
Betapa mudahnya menaruh beberapa kondisi dalam sebuah String di property Filter milik Field yang melakukan Lookup ke Table tertentu, bukan?
PHPMaker memang keren, dah… 🙂
Tinggalkan Balasan