Sudah terlalu banyak kemudahan yang disediakan oleh PHPMaker sebagai development tools untuk membuat aplikasi web. Termasuk yang satu ini, bagaimana cara menyembunyikan tombol Master/Detail Edit di aplikasi web yang dihasilkan oleh PHPMaker 2024.
Untuk menggunakan tombol Master/Detail Edit, maka pastikan sudah mengaktifkan opsi Master/Detail Edit (as Detail) terlebih dulu dari level Table milik table Detail di proyek PHPMaker 2024 kita.
Sebagai contoh, dari project demo2024, kita menggunakan table orders sebagai table Master, dan orderdetails sebagai table Detail. Nah, opsi Master/Detail Edit (as Detail) di atas harus kita aktifkan dari table Detail-nya, yaitu orderdetails.
Setelah opsi tersebut diaktifkan, maka selanjutnya kita ingin menambahkan business-logic yang akan menyembunyikan tombol Master/Detail Edit khusus data di table orders dengan OrderID = 11076. Bagaimana caranya?
Ternyata sangatlah mudah dan cepat. Kita cukup menambahkan sedikit kode PHP saja ke dalam server event ListOptions_Rendering milik table Master, dalam contoh di atas adalah table orders.
Sebelum kita menambahkan kode PHP ke dalam server event tersebut, mari kita lihat contoh kode yang sudah tercantum di server event ListOptions_Rendering pada project PHPMaker 2024 sebagai berikut:
//Container("DetailTableGrid")->DetailAdd = (...condition...); // Set to true or false conditionally
//Container("DetailTableGrid")->DetailEdit = (...condition...); // Set to true or false conditionally
//Container("DetailTableGrid")->DetailView = (...condition...); // Set to true or false conditionally
Mari kita akan bahas terlebih dulu contoh kode di atas.
PHPMaker 2024 sudah menyediakan contoh kerangka kode yang akan memandu kita untuk menampilkan atau menyembunyikan masing-masing tombol Master/Detail Add, Master/Detail Edit, dan Master/Detail View.
Seperti yang sudah dijelaskan dari setiap kode di atas, kita harus mengeset nilai true jika ingin menampilkannya, dan sebaliknya nilai false jika ingin menyembunyikannya.
Selanjutnya, mari perhatikan nama container di atas. Jangan langsung menggunakan nama container di atas, yang dalam hal ini DetailTableGrid.
Untuk mendapatkan nama container ini, maka kita harus melihat class dari table Detail, dalam hal ini adalah orderdetails, yang sudah dibangkitkan oleh PHPMaker. Caranya bagaimana?
Gampang sekali. Cukup buka file models/OrderdetailsGrid.php, lalu di sekitar baris ke-16 sampai ke-19, lihat kode berikut:
/**
* Page class
*/
class OrderdetailsGrid extends Orderdetails
Perhatikan nama class yang tercantum di atas, yaitu OrderdetailsGrid. Nah, nama class inilah yang kita gunakan sebagai nama container dari contoh kode di atas, sehingga kodenya menjadi seperti ini:
if ($this->OrderID->CurrentValue == "11076")
Container("OrderdetailsGrid")->DetailEdit = false;
else
Container("OrderdetailsGrid")->DetailEdit = true;
Sampai di sini, kita sudah berhasil menambahkan hanya 4 baris kode PHP ke dalam server event ListOptions_Rendering milik table Master, yaitu orders, yang fungsinya untuk menyembunyikan tombol Master/Detail Edit untuk kondisi data OrderID = 11076.
Perhatikan sekali lagi kode tersebut. Kita harus menangani kondisi untuk menampilkan maupun menyembunyikan tombol Master/Detail Edit tersebut. Jika tidak maka tombol Master/Detail Edit akan tetap disembunyikan di bawah data orders yang memiliki OrderID = 11076.
Untuk itu, pastikan selalu menambahkan kondisi else yang mengembalikan nilai true. Jika tidak, maka setelah data orders yang memiliki OrderID = 11076, maka tombol Master/Detail Edit akan ikut disembunyikan.
Setelah itu, silahkan generate ulang semua file script seperti biasa menggunakan PHPMaker 2024. Selanjutnya dari aplikasi web yang dihasilkan, perhatikanlah bahwa hanya data orders dengan OrderID = 11076 saja yang tombol Master/Detail Edit-nya disembunyikan.
Tapi jangan puas dulu, karena kita baru sebatas hanya menyembunyikan tombol Master/Detail Edit saja. Dalam hal ini, Pengguna Akhir aplikasi web masih tetap bisa mengakses halaman Master/Detail Edit untuk OrderID = 11076 dengan mengetikkan alamat ini di URL browser:
http://localhost/demo2024/ordersedit/11076?showdetail=orderdetails
Lalu bagaimana cara untuk mencegah Pengguna Akhir mengakses halaman Master/Detail Edit tersebut? Lagi-lagi sangat gampang sekali, kita cukup menambahkan 4 baris kode PHP berikut ke dalam server event Row_Selected milik table Master, yaitu orders:
if (CurrentPageID() == "edit" && Get("showdetail") == "orderdetails" && Route("OrderID") == "11076") {
$this->setFailureMessage("Akses Master/Detail Edit untuk OrderID = 11076 ditolak!");
$this->terminate("orderslist");
}
Nah, arti dari kode di server event Row_Selected tersebut adalah, jika halaman yang aktif adalah Edit, dan di URL ada parameter showdetail yang bernilai orderdetails, dan parameter route OrderID bernilai 11076, maka tampilkan pesan kesalahan dengan pesan tersebut di atas. Setelah itu, langsung redirect ke halaman orderslist.
Gimana? Sangat mudah dan cepat sekali, bukan? Bukan! PHPMaker gitu lho, hohoho… 😀
Tinggalkan Balasan