Tidak percuma memang PHPMaker 2021 menggunakan tagline The Best Gets Even Better, seperti yang ditampilkan pada website resminya: https://phpmaker.dev. Terbukti masih yang terbaik di kelasnya, PHPMaker juga terbukti semakin lebih baik dari versi-versi major sebelumnya.
Salah satu yang semakin baik itu bisa kita rasakan sendiri dari salah satu server event yang bernama Lookup_Selecting. Seperti namanya, server event ini akan dijalankan sebelum membangun SQL untuk memilih record-record dari lookup table.
Artinya, kita sebagai Web Developer masih diberi kesempatan melalui server event Lookup_Selecting ini untuk mengganti filter, supaya item-item yang ditampilkan bisa disesuaikan juga secara dinamis seperti yang kita butuhkan.
Di server event Lookup_Selecting ini, nama field, object Lookup, dan filter untuk lookup dapat ditampilkan dengan kode ini:
var_dump($fld->Name, $fld->Lookup, $filter);
$fld->Lookup adalah sebuah object Lookup. Untuk mengganti SQL lookup, maka kita dapat memodifikasi properties berikut milik object Lookup tadi:
UserSelect, yang merupakan pernyataan SELECT (hanya klausa SELECT dan FROM)
UserFilter, yang merupakan klausa WHERE
UserOrderBy, yang merupakan klausa ORDER BY
Dari menu Help atau Bantuan yang disediakan di aplikasi PHPMaker, kita dapat melihat 5 contoh kode berikut untuk menyesuaikan item-item yang terdapat di dalam field Lookup tersebut.
Di contoh pertama, kita dapat menambahkan filter tambahan ke filter table lookup.
function Lookup_Selecting($fld, &$filter) { // var_dump($fld->Name, $fld->Lookup, $filter); // untuk menampilkan nama field, object Lookup, dan filter if ($fld->Name == "MyLookupField") $fld->Lookup->UserFilter = "MyField = 'xxx'"; // asumsi: tipe field adalah string }
Di contoh yang kedua berikut, kita dapat mengganti operator standar dari field yang memiliki filter
function Lookup_Selecting($fld, &$filter) { if ($fld->Name == "MyLookupField") { $fld->Lookup->UseLookupCache = false; // pastikan dalam hal ini lookup cache dalam posisi non-aktif $fld->Lookup->setFilterOperator("FilterField", ">"); // operator baru menjadi tanda ">" (lebih besar) } }
Selanjutnya, pada contoh yang ketiga di bawah ini, kita dapat memodifikasi pernyataan SQL pada bagian SELECT dan ORDER BY:
function Lookup_Selecting($fld, &$filter) { if ($fld->Name == "MyLookupField") { $fld->Lookup->UserSelect = "SELECT Field1 AS lf, Field2 AS df, Field3 AS df2, '' AS df3, '' AS df4 FROM Table1"; // modifikasi pada bagian SELECT $fld->Lookup->UserOrderBy = "Field2 ASC"; // modifikasi pada bagian ORDER BY } }
Kemudian, pada contoh keempat berikut ini, kita dapat mengganti semua item yang terdapat di dalam control Combobox menjadi menggunakan array yang bersifat statis dengan menggunakan method setOptions milik object Lookup:
function Lookup_Selecting($fld, &$filter) { if ($fld->Name == "MyLookupField") $fld->Lookup->setOptions([ ["link1", "display1 row1", "display2 row1", "...", ""], ["link2", "display1 row2", "display2 row2", "...", ""], ["link3", "display1 row3", "display2 row3", "...", ""], ["link4", "display1 row4", "display2 row4", "...", ""] ]); // gunakan array statis }
Terakhir, untuk contoh yang kelima berikut, kita dapat menyesuaikan item-item di field Lookup tadi menggunakan data yang dihasilkan oleh fungsi global yang bernama ExecuteRows:
function Lookup_Selecting($fld, &$filter) { if ($fld->Name == "MyLookupField") $fld->Lookup->setOptions(ExecuteRows("SELECT LinkField, DisplayField1, DisplayField2, DisplayField3, DisplayField4 FROM MyTable")); // gunakan data yang dihasilkan oleh ExecuteRows }
Penting untuk diketahui, bahwa supaya kode pada contoh kelima ini bisa kita implementasikan, syaratnya adalah dua opsi berikut harus diset dari Fields setup -> panel Edit Tag:
– Use lookup table dalam posisi aktif atau enabled. Artinya, kita harus mengeset Lookup Table untuk field tersebut. Dengan kata lain, kita tidak dapat menyesuaikan item-item pada field Lookup tadi jika kita menggunakan User Values dari bagian Fields tadi.
– Use modal dialog for lookup dalam posisi tidak aktif atau disabled. Artinya, pastikan untuk menonaktifkan opsi ini jika ingin menyesuaikan item-item yang terdapat pada field Lookup tadi secara dinamis.
Dari kelima contoh di atas, maka server event Lookup_Selecting menjadi semakin powerful dan flexible lagi. Terbukti memang, bahwa PHPMaker 2021 adalah yang terbaik, dan semakin lebih baik lagi dari versi-versi major sebelumnya.
Bahkan, code generator lainnya belum ada yang bisa menyamai fleksibilitas dan kemampuan yang sudah disediakan oleh PHPMaker 2021 ini.
saya udah baca beberapa refrensi di situs ini dan sangat membantu, tapi ada satu yang masih saya belum bisa menyerdahanakanya: ” bagaimana cara kita menggunakan konsep pdo pada phpmaker v2020 apakah harus buat sendiri atau sudah ada librarinya dari phpmaker ?” kalo lihat dari help phpmaker sudah ada ExecuteRows ExecuterRow Execute kelihatanya sih kek pdo tapi gimana cara menggunakna yang advance-nya ke binding data pas ngrimi dari url gitu mas mohon arahanya
Kalau di versi 2020, harus buat sendiri, karena belum include library-nya dari PHPMaker.
Kalau untuk versi 2021, pilih pdo_mysql dari Tools -> Advanced Settings -> MySQL driver.
Halo pak
saya sudah membaca artikel2 bapak, sangat bagus untuk pemula seperti saya ini.
saya mau tanya ada kasus 2 tabel dgn struktur hampir sama beda beberapa field saja, bagaimana cara supaya form pada tabel 2 dapat otomatis terisi semua fieldnya ketika diketikan field ID tabel 1, sehingga data yang sama tersebut dapat tersimpan ke field 2. Terimakasih.
Halo juga. Anda bisa menggunakan server event Row_Inserted untuk mengeksekusi perintah memasukkan data di table yang sedang terbuka, ke dalam table lainnya.
Baca topik Server Events and Client Scripts dari menu Help PHPMaker.