Pernahkah Anda mengalami kesulitan ketika ingin membatasi jumlah Record yang akan ditampilkan di dalam tabel yang terdapat di halaman List pada Aplikasi Web yang dihasilkan oleh PHPMaker? Jika ya, maka uraian pada artikel ini akan menjadi solusinya buat Anda sebagai Web Developer!
Katakanlah di halaman Orders pada file demo project Aplikasi Web yang telah disediakan oleh PHPMaker, Anda ingin membatasi hanya satu Record saja yang ditampilkan di halaman List tersebut. Artinya, hanya boleh ada satu baris (row) Record saja yang kelihatan di halaman tersebut. Record kedua dan seterusnya harus disembunyikan.
Karena hanya ada satu Record saja yang akan ditampilkan, maka itu artinya hanya Record pertama dari Recordset yang digunakan di halaman List tersebut saja yang akan diambil. Sementara yang kita ketahui, Recordset di halaman Orders tadi secara standar (default) memiliki lebih dari satu Record dan mereka akan diurutkan berdasarkan field OrderID dengan orientasi pengurutan dari besar ke kecil (DESC).
Nah, ternyata ada kebutuhan bahwa kita harus mengubah terlebih dulu orientasi pengurutan menjadi dari kecil ke besar (ASC), yang dalam hal ini berarti kita mengambil ID Pesanan yang terkecil, lalu menampilkannya. Meskipun di dunia nyata biasanya kita akan mengambil ID Pesanan yang terakhir, tapi dalam contoh berikut kita akan mengubah urutan Recordset-nya dari DESC menjadi ASC. Tujuannya supaya kita bisa melihat betapa fleksibelnya kemampuan PHPMaker untuk mengubah orientasi pengurutan Record melalui kode pada bagian server event.
Solusinya sangatlah mudah, cepat, dan simpel. Kita hanya cukup menambahkan sedikit kode saja, baik dari bagian Server Events maupun dari Client Scripts. Lebih tepatnya, kita hanya menggunakan dua server event dan satu client script saja. Solusi ini untuk kesekian kalinya membuktikan bahwa PHPMaker bukan hanya sekedar Tools PHP Code Generator saja, tapi lebih dari itu. PHPMaker sangat powerful sekaligus fleksibel dalam menghasilkan Aplikasi Web dengan pola business-logic seperti apapun yang kita inginkan.
Baiklah, supaya tidak berlama-lama lagi, silahkan langsung ikuti langkah-langkah berikut.
- Pastikan Anda sudah membuka file demo project PHPMaker. Jika belum, Anda dapat men-download file demo project tersebut dari alamat ini: http://www.hkvstore.com/phpmaker/php11demo.zip.
-
Saya asumsikan Anda selanjutnya sudah berhasil menyesuaikan setting koneksi ke Database di localhost Anda (jika belum, baca Help-nya). Lalu, klik tabel orders dari panel Database, kemudian klik tab Code (Server Events, Client Scripts and Custom Templates), dan tambahkan kode berikut ke dalam server event Page_Load yang terdapat di bawah lokasi ini: Server Events -> Table-Specific -> List Page:
$this->setSessionOrderBy("`OrderID` ASC");
Tujuan dari kode ini adalah, kita harus mengubah terlebih dulu orientasi pengurutan Record dari yang semula DESC menjadi ASC pada field OrderID.
-
Langkah selanjutnya, tambahkan kode ini ke dalam server event Row_Rendered:
if (CurrentPageID() == "list" && $this->RowAttrs["data-rowindex"] > 1) { $this->RowAttrs["style"] = "display: none"; }
Arti dari kode ini adalah, kita memastikan bahwa baris Record yang akan disembunyikan hanya jika ID dari halaman yang ditampilkan adalah list, dan juga yang atribut data-rowindex-nya milik property RowAttrs dari object Table atau Page lebih besar dari 1, yang artinya mulai dari Record ke-2, ke-3, dan seterusnya.
Tentu saja, Anda bisa mengkostumisasi nilai dari kondisi if di atas, misalnya hanya menampilkan 3 Record teratas, maka Anda tinggal mengubah kode
if (CurrentPageID() == "list" && $this->RowAttrs["data-rowindex"] > 1) {
menjadi:
if (CurrentPageID() == "list" && $this->RowAttrs["data-rowindex"] > 3) {
dan seterusnya…
-
Sampai di sini kita sudah berhasil menambahkan kode PHP di bagian Server Events. Selanjutnya, kita akan menyembunyikan bagian Paging atau Pager yang terdapat di bagian atas dan atau bawah tabel. Tentu saja hal ini juga penting, karena kalau bagian Paging tidak disembunyikan, maka hasilnya menjadi tidak sinkron dengan jumlah Record atau row yang terdapat di dalam tabel pada halaman List tadi. Untuk itu, pastikan Anda sudah menambahkan kode jQuery berikut ke dalam Startup Script yang terdapat di bawah Client Scripts -> Table-Specific -> List Page:
$('.ewPager').hide();
Sekali lagi, fungsi dari kode ini adalah untuk menyembunyikan bagian Paging atau Pager yang menampilkan navigasi halaman. Kita cukup menyembunyikan elemen berdasarkan nama class-nya, yaitu ewPager.
- Terakhir, dan seperti biasa, pastikan Anda sudah men-generate ulang semua file script dengan menggunakan PHPMaker. Setelah itu, jalankan Aplikasi Web yang sudah dihasilkan melalui browser favorit Anda. Klik menu Orders, maka sekarang seharusnya Anda melihat hanya satu Record atau satu Row saja yang muncul di tabel pada halaman List tersebut.
Sampai di sini, cobalah lihat kembali kode yang sudah kita tambahkan tadi. Hanya beberapa baris saja, tapi betapa dahsyat hasilnya untuk mengimplementasikan kebutuhan tersebut. Bahkan, untuk menyembunyikan elemen tertentu di halaman List, kita bisa bermain-main dengan kode jQuery saja!
Betapa mudah, cepat, sekaligus menyenangkan sekali, bukan? 😀
Cak Sobri mengatakan
Terus bagaimana akses untuk halaman view,edit, atau delete, soalnya kalo diakses dengan URL yang menyangkut ID data yang disembunyikan masih bisa diakses/dilihat.
Masino Sinaga mengatakan
Saya kasih clue-nya saja ya. Anda bisa menggunakan server event Row_Selected untuk memeriksa key dari record tertentu dan apakah record tersebut diakses melalui halaman View atau Edit. Jika memenuhi kondisi tersebut, maka tinggal arahkan Pengguna kembali ke halaman List.
Gimana, sudah ada gambaran, ‘kan? 😀
Masino Sinaga mengatakan
Ya sudah kalau gitu, nih saya kasih penjelasannya: Mudahnya Membatasi Akses ke Record Tertentu di Aplikasi Web dari PHPMaker.
Cak Sobri mengatakan
Sip, biasanya saya ceknya pake Page_Load, ternyata ada yg lebih mudah lagi (y) 🙂
Nanda mengatakan
Bang Masino, saya buat Tabel Transaksi yg Beberapa Filed nya menggunakan Text Auto Fill yg mengacu ke Tabel Master dan beberapa menggunakan Lookup (Select).
Jumlahnya : 3 (Auto Fill) dan 9 (Lookup Select/ Combobox) yg mengacu ke Tabel Master.
(untuk salah satu Tabel Master nya Data nya mencapai Ribuan.)
Permasalahan nya adalah, Halaman List pada Tabel tersebut menjadi Lambat di Muat, untuk Halaman Add dan yg lain Tidak masalah, dan untuk Tabel yang lain juga tidak ada masalah.
Pertanyaan saya :
Apakah Lambat di Muat tersebut karena Banyak Lookup ke Tabel Master, atau bukan ya ?
karena sebelumnya saya juga pernah buat yang hampir mirip tapi gak ada masalah, data Master nya juga sama.
dan yang Lambat hanya pada Halaman List.
Masino Sinaga mengatakan
Bisa ya, bisa tidak. Tergantung kompleksitas dari Lookup Table-nya juga. Kalau jumlah record dari table lookup-nya banyak, apalagi ada filter-nya juga, ya jelas semakin lambat.