Entah sudah berapa banyak keuntungan yang kita peroleh ketika menggunakan PHPMaker untuk membangun Aplikasi Web. Selain fitur-fiturnya yang sangat lengkap, demikian juga fleksibilitas yang sangat tinggi.
Kita bisa menambahkan sedikit kode saja, untuk menampilkan fitur yang sebelumnya tidak pernah kita sangka bisa dilakukan dari PHPMaker.
Di artikel ini kita akan membahas bagaimana mudahnya menampilkan jendela Modal Dialog, ketika Pengguna Akhir mengklik atau melakukan dobel klik pada baris tabel yang terdapat di halaman List.
Sebelumnya, pastikan kita sudah mengaktifkan opsi Modal dialog masing-masing pada kelompok Edit Page maupun View Page yang terdapat di bawah Table setup dari project PHPMaker.
Setelah mengaktifkan kedua pengaturan itu, selanjutnya kita cukup menambahkan kode berikut dari bagian Startup Script yang terdapat di bawah lokasi: Client Scripts -> Table-Specific -> List Page pada project PHPMaker 2020:
<?php if (Security()->canEdit()) { // jangan lupa untuk security, jika akses bisa mengubah record ?> $(".table.ew-table tr").dblclick(function(e) { // event dobel klik untuk Edit Page // periksa saat kondisi apa saja event dobel klik tidak dieksekusi if (!$(e.target).hasClass('ew-preview-row-btn') && !$(e.target).hasClass('custom-control-label') && !$(e.target).hasClass('btn')) { var edit_modal = $(this).find("a.ew-row-link.ew-edit").attr("onclick"); // ambil sintax javascript modal dialog var edit_url = edit_modal.substring(edit_modal.lastIndexOf(":'") + 2, edit_modal.lastIndexOf("'")); // ambil url dari setiap baris tabel ew.modalDialogShow({lnk:this, url: edit_url, caption: '<?php echo Language()->phrase("Edit"); ?>', btn: 'SaveBtn'}); // tampilkan Edit Page dalam Modal Dialog } }); $(document).on("preview", function(e, args) { // preview row args.$tabpane.find("tr").dblclick(function (e) { // dobel klik // periksa saat kondisi apa saja event klik tidak dieksekusi if (!$(e.target).hasClass('btn') && !$(e.target).hasClass('ew-preview-row-btn') && !$(e.target).hasClass('custom-control-label')) { var edit_modal = $(this).find("a.ew-row-link.ew-edit").attr("onclick"); // ambil sintaks javascript modal dialog var edit_url = edit_modal.substring(edit_modal.lastIndexOf(":'") + 2, edit_modal.lastIndexOf("'")); // ambil url dari setiap baris tabel ew.modalDialogShow({lnk:this, url: edit_url, caption: '<?php echo Language()->phrase("Edit"); ?>', btn: 'SaveBtn'}); // tampilkan Edit Page dalam Modal Dialog } }); }); <?php } ?> <?php if (Security()->canView()) { // jangan lupa untuk security, jika akses bisa menampilkan satu record ?> $(".table.ew-table tr").click(function(e) { // event klik untuk View Page // periksa saat kondisi apa saja event klik tidak dieksekusi if (!$(e.target).hasClass('ew-preview-row-btn') && !$(e.target).hasClass('custom-control-label') && !$(e.target).hasClass('btn')) { var view_modal = $(this).find("a.ew-row-link.ew-view").attr("onclick"); // ambil sintaks javascript modal dialog var view_url = view_modal.substring(view_modal.lastIndexOf(":'") + 2, view_modal.lastIndexOf("'")); // ambil url dari setiap baris tabel ew.modalDialogShow({lnk:this, url: view_url, caption: '<?php echo Language()->phrase("View"); ?>', btn: null}); // tampilkan View Page dalam Modal Dialog } }); $(document).on("preview", function(e, args) { // preview row args.$tabpane.find("tr").click(function (e) { // singel klik // periksa saat kondisi apa saja event klik tidak dieksekusi if (!$(e.target).hasClass('btn') && !$(e.target).hasClass('ew-preview-row-btn') && !$(e.target).hasClass('custom-control-label')) { var view_modal = $(this).find("a.ew-row-link.ew-view").attr("onclick"); // ambil sintaks javascript modal dialog var view_url = view_modal.substring(view_modal.lastIndexOf(":'") + 2, view_modal.lastIndexOf("'")); // ambil url dari setiap baris tabel ew.modalDialogShow({lnk:this, url: view_url, caption: '<?php echo Language()->phrase("View"); ?>', btn: null}); // tampilkan View Page dalam Modal Dialog } }); }); <?php } ?>
Sekarang, mari kita bahas kode di atas.
Secara garis besar, kode di atas terbagi dua. Pertama untuk menangani event dblclick atau dobel klik, dan yang Kedua untuk menangani event click atau single klik.
Kita harus menangani beberapa kemungkinan berikut supaya kode untuk menampilkan jendela Modal Dialog tersebut tidak dieksekusi:
1. Jika control Checkbox ditampilkan di kolom pertama pada tabel di halaman List. Control ini akan ditampilkan jika pilihan Selected records untuk Export dipilih dari lokasi PHP -> Page Options (Global) -> Export -> Export type pada project PHPMaker 2020.
Selain itu, control Checkbox akan ditampilkan, jika kita menulis kode di server event Row_CustomAction dan Page_Load dengan kondisi multiple records.
Selengkapnya baca artikel saya berjudul Cara Menampilkan Checkbox di Setiap Record pada Halaman List dari PHPMaker,
2. Jika fitur Master/Detail diaktifkan, sehingga sistem akan menampilkan icon plus kecil di sebelah kiri dari setiap baris (+) untuk meng-expand, termasuk tombol minus kecil (-) untuk meng-collpase area tabel Detail,
3. Jika pilihan Use button dropdown for links diaktikfan dari lokasi PHP -> Page Options (Global) project PHPMaker 2020, sehingga di setiap baris tabel memiliki tombol Dropdown yang menampilkan menu-menu seperti View, Edit, Copy, Master/Detail, dan sebagainya.
Artinya, selain dari ketiga kondisi tadi, maka kita boleh mengeksekusi kode yang untuk menampilkan jendela Modal Dialog tersebut.
Jika beberapa kondisi tadi tidak ditangani, maka ketika Pengguna Akhir memberi tanda centang pada Checkbox, atau mengklik icon plus kecil atau minus kecil, atau mengklik tombol Dropdown, maka kode untuk menampilkan jendela Modal Dialog tadi akan dieksekusi.
Supaya fitur ini efektif dijalankan di Aplikasi Web kita, maka disarankan supaya kita tidak mengaktifkan opsi Use button dropdown for links dari lokasi berikut: PHP -> Page Options (Global) project PHPMaker 2020.
O iya, sebelumnya saya sudah share mengenai fleksibilitas PHPMaker ini, melalui Forum Diskusi PHPMaker, dengan topik berjudul How to Display ViewPage in Modal Dialog on Row Click (v2019).
Sagaf mengatakan
Pak bisa minta email / nomer wa
Saya mau tanya masalah membership di ilovephpmaker
Masino Sinaga mengatakan
Barusan sudah saya kirim ke Email Anda.
Slavan mengatakan
Bgmn cara menampilkan suatu dialog box yang akses tabel lain saat akses suatu menu (dari suatu tabel) yang dibuat dari javascript di Client SCRIPT -> Table Specific -> List Page -> Startup Script sebelum List Page. Dialog box itu bisa di-close. Sya cba mengakali dg konsep menaruh coding look up table di script tapi belum ketemu codingnya, apakah bisa dengan mengakali ini atau enaknya gmn ? Terima kasih
Masino Sinaga mengatakan
Contoh kodenya sudah pernah saya buatkan di project khusus: Download Stock Inventory Management Project.
Info lebih lanjut mengenai project tersebut ada di artikel ini: Inventory Stock Management Project, Why Should You Have It?, penjelasannya ada di poin 22 artikel tersebut:
“How to display the Payment form by using Bootstrap 4 Modal Dialog via click event on button in each row.”
Jadi, contoh kasusnya di situ menampilkan jendela Modal dialog yang berisi form Add untuk menambahkan data Payment (ke table payments) dari menu/table yang berbeda, yaitu masing-masing: Purchases dan Sales.
Demo: Demo Stock Inventory Management.
Slavan mengatakan
Hampir mendekati Pak. Semoga kalau pertanyaannya seperti ini bisa lebih jelas : Bagaimana cara membuat dengan client event di PHPMaker, mau menampilkan suatu tabel dalam dialog box ketika suatu sub-menu di-klik (di event Startup Script) ? atau kalau dari server event jg gpp. Terima kasih.
Masino Sinaga mengatakan
Apakah yang dimaksud menampilkan List Page di dalam Modal dialog melalui event click pada item sub-menu?
Slavan mengatakan
Iya, seperti itu tetapi List Page yang ditampilkan adalah tabel lain.
Masino Sinaga mengatakan
Sayangnya, List Page belum mendukung untuk ditampilkan menggunakan Modal Dialog.
Saat ini PHPMaker baru bisa menampilkan List Page melalui fitur Lookup Table yang di-trigger dari control Select atau Combobox, dengan cara mengaktifkan pilihan Use modal dialog for lookup dari Fields setup -> panel Edit Tag.
Slavan mengatakan
Klu pake AJAX untuk tammpilin tabel dari Client Event, startup script apakah memungkinkan ?
Masino Sinaga mengatakan
Kalau fitur bawaan PHPMaker nya belum ada.
Slavan mengatakan
Maaf OOT. Pada lookup table, ada 4 yg bisa muncul sebagai display field. Gmn caranya mengambil display itu dan diisikan ke field lain, sdh saya coba document.getElementById(‘x_kode’).value; yang keambil justru nilai id dan bukan nilai yg display. Terima kasih.