Seperti yang sudah kita ketahui, PHPMaker menyediakan fungsi global untuk mendeteksi ID dari halaman yang sedang diakses oleh Pengguna. Kita bisa menggunakan fungsi CurrentPageID(), yang akan mengembalikan nilai seperti add, edit, list, view, search, dan seterusnya.
Untuk halaman tunggal memang tidak ada masalah. Contohnya, kita hanya menampilkan data dari satu table tunggal seperti orders saja atau orderdetails saja.
Lalu pertanyaannya adalah, bagaimana cara membedakan antara halaman tunggal dengan halaman Master/Detail yang di dalamnya menyertakan data Master dan Detail sekaligus?
Katakanlah di halaman Master/Detail Edit yang menampilkan data table orders (sebagai Master) dan data table orderdetails (sebagai Detail), kita ingin memastikan bahwa itu adalah halaman Edit untuk mengubah data dari kedua table tadi.
URL dari halaman Master/Detail Edit yang saya maksud, contohnya adalah seperti ini:
ordersedit.php?showdetail=orderdetails&OrderID=123
Solusinya ternyata sangatlah mudah. Kita tetap mengandalkan fungsi global CurrentPageID() tadi, lalu dikombinasikan dengan penggunaan method getCurrentDetailTable milik dari object Page atau Table dari halaman yang sedang kita buka.
Sehingga untuk contoh kasus di atas tadi, kode PHP-nya adalah:
echo "ID Halaman: ".CurrentPageID(); echo "<br>Table Detail: ".CurrentPage()->getCurrentDetailTable();
dan akan menampilkan keluaran hasil seperti ini:
ID Halaman: edit Table Detail: orderdetails
O iya, kode tersebut bisa Anda tempatkan misalnya di server event Page_Render yang lokasinya berada di bawah Server Events -> Table-Specific -> Edit Page.
Jadi, arti dari keluaran kode di atas, kita sedang membuka halaman Edit yang mengandung data table Detail orderdetails, sehingga bisa disimpulkan bahwa halaman yang diakses saat itu adalah halaman Master/Detail Edit.
Perlu diketahui juga, bahwa PHPMaker selain bisa menampilkan form Master/Detail Edit untuk satu table Detail, dia juga bisa menampilkan halaman Master/Detail Edit untuk beberapa table Detail. Jadi, method getCurrentDetailTable tadi akan mengembalikan lebih dari satu nama table Detail, di mana antara satu table Detail dengan table Detail lainnya dipisahkan dengan karakter koma.
Sedangkan jika kode di atas dijalankan juga di halaman tunggal orders saja atau orderdetails saja, maka method getCurrentDetailTable tadi akan mengembalikan nilai string kosong.
Dari kode di atas, kita dapat melakukan pemeriksaan melalui server event Page_Render halaman Edit milik table Master (sekali lagi, table Master dan bukan table Detail), sehingga kode selengkapnya menjadi seperti ini:
// Page Render event function Page_Render() { //echo "Page Render"; if (CurrentPageID() == "edit" && CurrentPage()->getCurrentDetailTable() == "orderdetails") { // tulis kode Anda di sini saat mode Master/Detail Edit ... // ... } }
Kesimpulannya, kita sebagai Web Developer dengan mudahnya bisa membedakan apakah halaman itu adalah halaman Edit tunggal (untuk satu table) atau halaman Master/Detail Edit (untuk dua table atau lebih).
Wow, betapa mudah, cepat, simpel, dan menyenangkan sekali, bukan? 😀
alfa mengatakan
Selamat malam pak….Bila tombol edit di table master/detil sudah diedit sekali langsung read only dan sudah tidak bisa diedit lagi gimana caranya ya pak maksud sya contoh kodenya mohon bantuanya pak….trimakasih
Masino Sinaga mengatakan
Sekarang saya tanya balik, supaya bisa tahu apakah sudah pernah diedit atau belum, apa yang seharusnya Anda lakukan pada table yang terkait? Perlu ada tambahan field, nggak? Coba jawab dulu.
alfa mengatakan
Sudah sya coba edit pak…..dan sya perlu tambahan field…….contohnya sya punya order dan order detil modify nya kode dari kedua table tersebut….yang saya akan edit ialah table orderdetil di kolom keterangan….maksud say sih sebenarnya agak mirip dengan pembuatan surat jalan…..bila surat jalan dicetak dengan no tertentu maka sudah tidak bisa diedit lg…..mohon bantuanya pak
Masino Sinaga mengatakan
Nah, itu logikanya sudah dapat kan. Jika sudah pernah diedit, update field tambahan tadi dengan nilai tertentu. Selanjutnya saat menampilkan halaman itu kembali, lakukan query ke database, cek nilai pada field tambahan tadi, dan jika nilainya sesuai dengan kriteria tertentu, tinggal disable aja tombol Edit-nya menggunakan server event ListOptions_Rendered. Gampang kan?