Pada PHPMaker versi 2020 dan versi-versi major sebelumnya, kita dapat mencampur kode PHP di bagian Client Script dan/atau Startup Script. Sayangnya, sejak PHPMaker versi 2021, hal itu sudah tidak bisa lagi. Kita tidak dapat menulis kode PHP di antara kode Javascript/jQuery pada kedua bagian tadi.
Belakangan, ketentuan ini sedikit berubah. Hanya untuk level global saja ketentuan ini berlaku. Sedangkan untuk level table/page, maka ketentuan ini tidak berlaku. Itu artinya, kita masih bisa mencampur kode PHP ke dalam kode Javascript di bagian Client Script atau Startup Script pada level table/page.
Tentu timbul pertanyaan, mengapa? Jawabannya, karena kode yang di-generate oleh PHPMaker pada bagian Client Script dan Startup Script untuk level global tadi, akan ditempatkan ke dalam file .js (Javascript). Itu artinya, kode di dalam file .js tidak boleh mengandung kode PHP.
O iya. Sekedar mengingatkan saja. Kedua bagian Client Script dan Startup Script tersebut dikenal dengan istilah Client Scripts (dengan akhiran huruf s) di dalam project PHPMaker, yaitu area yang disediakan bagi Web Developer untuk menulis kode Javascript/jQuery, agar kode tersebut nantinya dieksekusi di sisi client (browser) dari Aplikasi Web yang dibangkitkan oleh PHPMaker.
Istilah Client Scripts di dalam project PHPMaker meliputi 2 bagian tadi, yaitu Client Script (tanpa akhiran huruf s), dan Startup Script.
Jadi, jika Anda melihat istilah Client Scripts (dengan akhiran huruf s) dalam PHPMaker, jangan bingung lagi ya, karena istilah itu mengacu kepada 2 bagian tadi, yaitu Client Script (tanpa akhiran huruf s) dan Startup Script.
Kembali ke topik semula.
Jika kita sudah tidak bisa lagi mencampur kode PHP dengan kode Javascript/jQuery di bagian Client Scripts, maka pertanyaan selanjutnya adalah, bagaimana jika kita ingin menambahkan business-logic yang biasanya kita tulis dengan kode PHP? Hehe, pertanyaan bagus dan cerdas!
Jawabannya: tidak perlu khawatir! Seperti biasa, tetap tenang, stay cool, dan jangan panik, hehehe…
Di PHPMaker 2021, sudah tersedia sebuah fungsi PHP global yang bernama SetClientVar. Sesuai namanya, fungsi ini untuk mengeset variable dari sisi server ke sisi client. Ada dua parameter di dalam fungsi tersebut. Parameter pertama adalah nama variabel di sisi client, sedangkan parameter kedua adalah nilai atau variable di sisi server, yang akan kita kirim ke sisi client.
Untuk menggunakan fungsi global itu, PHPMaker pun sudah menyediakan server event khusus yang bernama Page_Rendering yang berada di bawah lokasi berikut: Server Events -> Global -> All Pages.
Contoh, kita ingin mengirim nilai current user id ke sisi client, maka cukup dengan menulis kode berikut pada server Page_Rendering tersebut:
// pass variables from server-side to to client-side: SetClientVar("curUserId", CurrentUserID());
Dalam contoh kode ini, nama variable di sisi client adalah curUserId, dan karena tipenya String, maka harus diapit dengan karakter petik ganda. Variabel curUserId tersebut artinya akan diisi dengan nilai dari fungsi global PHP bawaan PHPMaker yang bernama CurrentUserID().
Selanjutnya, untuk menangkap nilai dari variable di sisi client, kita bisa menulis kode Javascript pada area Client Scripts dari project PHPMaker. Uniknya, PHPMaker sudah menyediakan sebuah variable global dalam bentuk object variable, untuk menampung semua variable yang diset dari sisi server tadi, yaitu ew.vars.
Scope dari object variable ini adalah global. Itu artinya, kita bisa membaca nilai variable tadi dari bagian manapun di dalam project PHPMaker.
Dalam contoh di atas, maka kita cukup menulis kode Javascript berikut dari bagian Client Scripts project PHPMaker:
// get variable from server-side in client-side: var curUserId = ew.vars.curUserId;
Dalam kode ini, kita mendeklarasikan variable Javascript yang bernama curUserId, yang nilainya kita tampung dari object variable ew.vars.curUserId.
Sangat mudah, bukan?
Meskipun sekarang kita sudah tidak bisa lagi menggunakan atau mencampur kode PHP ke dalam kode Javascript/jQuery di sisi client, kita masih tetap dapat menghubungkan sisi server dan sisi client dengan menggunakan fungsi global SetClientVar.
PHPMaker memang tiada duanya, hehehe… 🙂
Catatan: artikel ini diperbarui pada hari Jumat, 30 April 2021 sekitar pukul 15:56, dengan menambahkan informasi bahwa ketentuan ini hanya berlaku untuk Client Script dan Startup Script yang scope-nya global. Sedangkan untuk Client Script dan Startup Script yang scope-nya table/page, ketentuan ini tidak berlaku.
Abu Syifa mengatakan
Bisakah SetClientVar digunakan di Page_Render?
Masino Sinaga mengatakan
Mungkin bisa, tapi scope-nya hanya untuk halaman itu saja.
Rudy mengatakan
pak masino apakah ini juga berlaku di phpmaker 2020 ?
Masino Sinaga mengatakan
Hehe, kan sudah disebutkan di judulnya… pada PHPMaker 2021. Berarti untuk PHPMaker 2020 tidak berlaku. 😉
sukirno kasau mengatakan
$(document).ready(function(){
$(“#x_Category”).change(function() {
var str = $(“option:selected”, this);
if (this.value == “Consumable”) {
$(“#r_Count”).show();
} else {
$(“#r_Count”).hide();
}
});
});
mas masino untuk script di atas bisa di simpan dimn kalau di phpmaker 2021
Masino Sinaga mengatakan
Di bagian Startup Script.