Tidak percuma memang PHPMaker 2021 menggunakan tagline The Best Gets Even Better, seperti yang ditampilkan pada website resminya: https://phpmaker.dev. Terbuti 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.
Tinggalkan Balasan