Ada yang masih ingat dengan item pengaturan Requires search criteria yang terdapat di menu Table pada project PHPMaker? Sekedar mengingatkan kembali, ini adalah pengaturan yang jika diaktifkan, maka data pada tabel yang terdapat di halaman List dari Aplikasi Web yang dihasilkan oleh PHPMaker, tidak akan ditampilkan.
Saat halaman List ini dibuka pertama sekali, maka tidak ada data di dalamnya. Di halaman itu akan muncul pesan secara standar Please enter search criteria. Artinya, Pengguna harus menentukan kriteria pencarian terlebih dulu, melalui form di bagian atas halaman List, lalu klik tombol Search, barulah sistem akan menampilkan datanya. Itupun jika kriteria pencarian yang dimasukkan benar, barulah data bisa ditampilkan.
Kondisi seperti ini sangat cocok jika data di suatu table sudah sangat banyak; ribuan atau bahkan jutaan, dan kita tidak ingin menampilkan semua atau bahkan satu record pun di halaman List. Satu-satunya cara dengan mengaktifkan pengaturan di atas tadi, lalu generate ulang semua file script.
Namun, sering kali karena kebutuhan Pengguna, kondisi di atas harus bisa kita terapkan secara dinamis. Artinya, untuk kondisi tertentu, kita mengharuskan Pengguna memasukkan kriteria pencarian data terlebih dulu sebelum dapat menampilkan data di halaman List. Di sisi yang lain, kita harus menerapkan kondisi menampilkan beberapa record saat halaman List pertama kali dimuat.
Sayangnya, yang kita ketahui selama ini, jika ingin mengaktifkan fitur tadi, maka kita harus melakukannya dari dalam project PHPMaker. Setelah itu barulah men-generate ulang semua file script seperti biasa. Demikian pula sebaliknya, jika kita ingin menonaktifkannya, maka kita harus melakukannya kembali dari dalam project PHPMaker tadi. Buka dulu file project-nya, nonaktifkan, simpan project, lalu men-generate ulang semua file script.
Terlepas dari kemampuan PHPMaker yang demikian powerful seperti uraian di atas, dua hari yang lalu saya menemukan satu lagi rahasia fleksibilitas PHPMaker. Berawal dari pertanyaan salah seorang member di forum diskusi PHPMaker, saya pun penasaran apakah pengaturan itu bisa diatur secara dinamis. Artinya, pengaturan ini seharusnya bisa dilakukan dari bagian Server Events.
Setelah melakukan eksperimen beberapa saat (sesuatu yang menantang sekaligus mengasyikkan di PHPMaker), hasilnya luar biasa! Ternyata diam-diam PHPMaker memberikan fleksibilitas yang sangat tinggi kepada Web Developer, untuk menerapkan pengaturan tadi secara dinamis. Dengan kata lain, kita tidak perlu lagi mengesetnya melalui pengaturan Requires search criteria dari Table setup di project PHPMaker.
Kita cukup menambahkan sedikit kode PHP saja ke dalam server event Recordset_Selecting yang terdapat di bawah lokasi Server Events -> Table-Specific -> Common, sehingga kode selengkapnya kira-kira menjadi seperti ini:
// Recordset Selecting event function Recordset_Selecting(&$filter) { // Enter your code here if ($filter == "") { $filter = "0=101"; $this->SearchWhere = $filter; $this->setSessionWhere($filter); $this->CurrentFilter = ""; } }
Ini adalah contoh kode yang paling sederhana. Artinya, yang tadinya kita harus mengaktifkan terlebih dulu pengaturan Requires search criteria dari dalam project PHPMaker, maka sekarang kita tidak perlu lagi melakukannya. Sebagai gantinya, kita cukup menambahkan sedikit kode PHP tadi ke dalam server event Recordset_Selecting, lalu generate ulang file script kembali dari PHPMaker.
Oke, sampai di sini, seolah tidak ada bedanya, bukan? Antara mengaktifkan pengaturan tadi, dengan menggunakan kode di server event Recordset_Selecting?
Nah, supaya menjadi ada bedanya, maka kita bisa menambahkan kondisi di server event tadi. Kode PHP di atas bisa kita kembangkan sesuai kebutuhan. Katakanlah kita menerapkan business-logic, selain Level Pengguna 1, maka harus memasukkan kriteria pencarian terlebih dulu. Sebaliknya, khusus level Pengguna 1, tampilkan data yang memiliki ID Pesanan lebih besar dari 1234. Kode di atas cukup kita ubah menjadi:
// Recordset Selecting event function Recordset_Selecting(&$filter) { // Enter your code here if (CurrentUserLevel() == 1) { $filter = "OrderID > 1234"; } else { // default if ($filter == "") { $filter = "0=101"; $this->SearchWhere = $filter; $this->setSessionWhere($filter); $this->CurrentFilter = ""; } } }
Dengan memungkinkannya kita menaruh kode di server event Recordset_Selecting, maka sekaligus kita dapat mengkolaborasikan dengan business-logic lain yang sesuai dengan karakteristik kode di server event ini. Misalnya, kita ingin menambahkan kondisi yang berbeda untuk Level Pengguna yang lainnya.
Luar biasa! PHPMaker benar-benar memiliki fleksibilitas yang sangat tinggi, dan tidak dimiliki oleh produk sejenis lainnya. Bayangkan! Hanya dengan sedikit kode itu saja, Aplikasi Web yang kita hasilkan memiliki kemampuan yang dinamis sesuai kebutuhan.
Betapa mudah, cepat, dan menyenangkan sekali, bukan? 🙂
Achmad Nashihuddin mengatakan
Salam Kenal pak masino, sangat menarik ulasannya.
saya mencoba menggunakan fungsi di record selecting. seperti berikut : ew_AddFilter($filter, “week = ‘”.$_GET[“week”].”‘”);
hal ini menyebabkan fungsi page size dan paging error pak. keluar pesan tidak ada record, karena variable $_GET[“week”] tidak bisa didapatkan.
terima kasih atas bantuannya pak
Masino Sinaga mengatakan
Lha itu sudah tahu penyebabnya. Tinggal pastikan saja kan, nilai dari variable $_GET[“week”] sudah terisi dengan nilai yang benar. Kalau Anda tidak bisa menggunakan variable GET itu, berarti tinggal ganti saja dengan nilai lain menggunakan variable yang bukan GET.
Achmad Nashihuddin mengatakan
variabel GET disini sy butuhkan untuk filter pak. ini contohnya view_pengaturan_colist.php?week=15.
dan ketika saya merubah page size url berubah menjadi view_pengaturan_colist.php?t=view_pengaturan_co&recperpage=15
sehingga sy tidak bs mendapatkan variabel GET[‘week’]. gmn ya pak cara mengakalinya
Masino Sinaga mengatakan
Simpan nilainya ke session variable. Googling aja tentang session variable.
Achmad Nashihuddin mengatakan
sy coba simpan divariabel session di listpage->pageload
tp kq tetap ga bs ya pak ketika sy rubah pagesizenya.
Masino Sinaga mengatakan
Gak paham saya apa yang Anda maksudkan merubah pagesize dengan kode di atas. Hubungannya gak jelas!
Achmad Nashihuddin mengatakan
maaf pak kalau tidak jelas penjelasan saya.
yg sy maksud pagesize itu dropdown untuk menampilkan jumlah data per halaman.
halaman aplikasi sy url nya view_pengaturan_colist.php?week=15.
di halaman tersebut sy cb menampilkan 15 data per halaman, tapi data tidak bisa ditampilkan, karena url diredirect ke view_pengaturan_colist.php?t=view_pengaturan_co&recperpage=15.
Masino Sinaga mengatakan
Saya sebutkan di komentar saya sebelumnya dengan istilah tidak jelas, karena variable di URL menggunakan recperpage, tapi Anda menggunakan variable GET yang bernama week.
Ya jelas gak nyambunglah.
Jovanito mengatakan
pak masino apa bisa mengubah nama pesan “please enter search criteria” ?
saya mencoba di message_showing tampilan pesan tidak berubah
Masino Sinaga mengatakan
Jangan di situ, tapi di Page_Load:
Jovanito mengatakan
itu di table specific -> list page -> page load .
bener begitu pak ?
Masino Sinaga mengatakan
Iya.
Jovanito mengatakan
terima kasih pak
Masino Sinaga mengatakan
Sama-sama.