Tiga minggu terakhir adalah kegiatan yang sangat mengasyikkan bagi saya. Bagaimana tidak, ini adalah serangkaian kegiatan yang membuat setiap bangun di pagi hari menjadi lebih semangat:
1. Dimulai dari saat mengetahui fitur-fitur baru yang dirilis di PHPMaker versi 12,
2. Melihat-lihat gambar screenshot iklannya berulang-ulang (sangkin belum percayanya, eh, hehe),
3. Mempelajari source code, baik dari template maupun dari file yang sudah dibangkitkan oleh PHPMaker,
4. Membandingkannya dengan versi 11,
5. Memutahirkan Masino Extensions supaya mendukung dijalankan pada versi 12,
6. Mengetes dan memastikan segala sesuatunya berjalan dengan lancar,
7. Sampai kepada menikmati hasil akhirnya melalui beberapa Aplikasi Web yang sudah berhasil saya perbarui dengan menggunakan PHPMaker versi 12.
Sangkin asyiknya, sampai lupa untuk menulis artikel dan memperbarui situs ini dengan informasi yang saya yakin pasti sudah Anda tunggu-tunggu. Untunglah hari ini sudah mulai longgar. Ada sedikit waktu luang yang bisa dimanfaatkan untuk menginfokan kepada Anda mengenai perubahan kode apa saja yang terjadi di Aplikasi Web yang dihasilkan oleh PHPMaker versi 12 ini.
Perubahan kode ini penting untuk kita ketahui, apalagi sejak PHPMaker mendukung penggunaan lebih dari satu Database. Tentu ada konsekuensi yang harus diikuti pada kode PHP yang dihasilkan olehnya.
Oke, tanpa basa-basi lagi, ini dia selengkapnya.
-
Perubahan Konstanta Koneksi ke Database
Seperti yang sudah kita ketahui, secara standar di versi 11 dan sebelumnya, PHPMaker menggunakan konstanta berikut untuk koneksi ke Database MySQL:
EW_CONN_HOST, untuk menampung data host atau IP Address web server
EW_CONN_USER, untuk menampung data username koneksi ke Database
EW_CONN_PASS, untuk menampung data password koneksi ke Database
EW_CONN_DB, untuk menampung data nama DatabaseSejak versi 12, konstanta tersebut masing-masing berubah menjadi beberapa variabel berikut:
$EW_CONN[“DB”][“host”]
$EW_CONN[“DB”][“user”]
$EW_CONN[“DB”][“pass”]
$EW_CONN[“DB”][“db”]Tentu saja sudah dapat ditebak alasan mengapa perubahan ini terjadi, yaitu untuk mengantisipasi beberapa setting koneksi ke Database dalam satu project PHPMaker. Dari variabel yang baru ini, kita bisa menyimpulkan bahwa untuk koneksi ke Database utama yang digunakan di project PHPMaker, diawali dengan $EW_CONN[“DB”]. Untuk melihat property apa saja yang terdapat di dalamnya, kita bisa menggunakan kode:
var_dump($EW_CONN["DB"]);
Sedangkan untuk koneksi ke Database tambahan lainnya (yang bukan Database utama), bisa menggunakan kode dengan format awalan:
$EW_CONN["<nama_database>"]
Contoh, jika ada Database tambahan yang bernama demo2, maka variabel untuk koneksi ke Database tersebut adalah:
$EW_CONN["demo2"]
Untuk menampilkan nilai property apa saja yang ada di dalamnya, kita bisa menggunakan kode:
var_dump($EW_CONN["demo2"]);
-
Penambahan Variabel Global yang Baru: $UserTableConn
Mungkin ada yang bertanya: Mengapa? Untuk apa? Jawabannya, karena sejak versi 12, PHPMaker sudah mendukung pemakaian Database lebih dari satu di dalam project. Variabel global yang baru tersebut berguna untuk membedakan antara object Connection ke Database Utama dengan object Connection ke Database Tambahan.
Object Connection ke Database Utama menggunakan $UserTableConn. Dari namanya, kita sudah bisa menyimpulkan bahwa variabel global ini adalah object Connection yang terkait dengan table User yang terdapat dalam Database Utama dan digunakan di dalam project. Jadi, PHPMaker membedakannya dari nama object Connection yang mengandung table user.
Bandingkan dengan versi 11 dan sebelumnya. Kita biasanya menggunakan object $conn. Dulu kita sering menggunakan kode seperti ini:
global $conn; $rs = $conn->Execute("SELECT FieldName FROM TableName WHERE blablabla");
maka, di versi 12 sebaiknya kita harus mulai membiasakan diri menggunakan kode tersebut menjadi seperti ini:
global $UserTableConn; $rs = $UserTableConn->Execute("SELECT FieldName FROM TableName WHERE blablabla");
Meskipun demikian, sepertinya object $conn masih tetap dipertahankan di versi 12. Alasanya seperti biasa, agar tetap kompatibel dengan kode yang ditulis oleh Web Developer di bagian Server Events pada project versi 11 dan sebelumnya. Apalagi jika secara standar, kita masih hanya tetap menggunakan satu Database saja di dalam project. Tidak percaya? Buktikan saja sendiri, hehe…
Dengan adanya perubahan yang mendasar ini, maka ternyata berpengaruh juga kepada kode yang selama ini biasa kita gunakan di server event Database_Connecting (akan saya jelaskan di point selanjutnya).
-
Penyesuaian Parameter $info di Server Event Database_Connecting
Masih ingat dengan kode ini di server event Database_Connecting pada versi 11 dan sebelumnya?
function Database_Connecting(&$info) { // example if (ew_CurrentUserIP() <> "127.0.0.1") { // production server $info["host"] = "localhost"; $info["user"] = "xxx"; $info["pass"] = "yyy"; $info["db"] = "production_db"; } }
Kode tersebut sebenarnya tidak masalah jika dijalankan di project PHPMaker 12 yang menggunakan satu Database saja. Tapi bagaimana jika menggunakan lebih dari satu Database? Tentu harus ada penyesuaian, bukan?
Nah penyesuaian yang saya maksud di sini adalah, kita harus menangani setting koneksi ke Database Utama maupun ke Database Tambahan. Ingat, Database Tambahan di sini tentu saja bisa lebih dari satu!
Katakanlah di samping kita menggunakan Database Utama, kita juga menggunakan satu Database Tambahan lainnya, dan supaya lebih mudah dipahami, mari kita ambil contoh project demo yang telah disediakan oleh PHPMaker.
Di sana database utama bernama demo, sedangkan database tambahan hanya ada satu yaitu bernama demo2.
Untuk menangani setting di production server, maka kode di atas akan menjadi seperti ini:
// Database Connecting event function Database_Connecting(&$info) { // Example: if (ew_CurrentUserIP() <> "127.0.0.1") { // production server if ($info["db"] == "demo") { // jika dabase utama $info["host"] = "localhost"; $info["user"] = "xxxx"; $info["pass"] = "yyyy"; $info["db"] = "dbutama_production"; } elseif ($info["db"] == "demo2") { // jika database tambahan $info["host"] = "localhost"; $info["user"] = "xxxx"; $info["pass"] = "yyyy"; $info["db"] = "dbtambahan_production"; } } }
Perhatikanlah bahwa dalam hal ini kita hanya menangani setting koneksi Database di server production saja. Sedangkan untuk setting koneksi Database di localhost, tidak perlu kita tangani dari server event ini, karena sudah menggunakan setting standar yang terdapat di dalam file ewcfg12.php.
Untuk membedakan antara database utama dengan database tambahan, maka kita cukup mengoptimalkan parameter $info[“db”], di mana jika nilainya sama dengan demo, maka ubah setting koneksi database yang bertalian di production server.
Demikian pula halnya untuk database tambahan, yang dalam hal ini kita deteksi dengan menggunakan nama demo2, maka kita bisa menyesuaikan setting koneksi database tersebut di production server.
Sedangkan khusus untuk Database Oracle, ada perbedaan dengan penambahan dua parameter milik variable $info tadi, yaitu type dan id.
Jika di PHPMaker versi 11 kita bisa menggunakan kode seperti ini untuk Database Oracle:
function Database_Connecting(&$info) { // Example: //var_dump($info); if (ew_CurrentUserIP() == "127.0.0.1") { // testing on local PC $info["host"] = "localhost"; // <-- masih bisa menggunakan locahost $info["user"] = "aaaaa"; // <-- sesuaikan! $info["pass"] = "bbbbb"; // <-- sesuaikan! $info["db"] = "ccccc"; // <-- misalnya: ora11g } else { $info["host"] = "xxxxx"; // <-- sesuaikan! $info["user"] = "yyyyy"; // <-- sesuaikan! $info["pass"] = "zzzzz"; // <-- sesuaikan! $info["db"] = "blablabla"; // <-- sesuaikan! } }
maka sejak versi 12, terjadi penyesuaian menjadi seperti berikut untuk Database Oracle:
function Database_Connecting(&$info) { // Example: //var_dump($info); if (ew_CurrentUserIP() == "127.0.0.1") { // testing on local PC $info["id"] = "DB"; // <-- sejak versi 12 $info["type"] = "ORACLE"; // <-- sejak versi 12 $info["host"] = false; // <-- jika di locahost, maka harus false $info["user"] = "aaaaa"; // <-- sesuaikan! $info["pass"] = "bbbbb"; // <-- sesuaikan! $info["db"] = "ccccc"; // <-- misalnya: ora11g } else { $info["id"] = "DB"; // <-- sejak versi 12 $info["type"] = "ORACLE"; // <-- sejak versi 12 $info["host"] = "xxxxx"; // <-- sesuaikan! $info["user"] = "yyyyy"; // <-- sesuaikan! $info["pass"] = "zzzzz"; // <-- sesuaikan! $info["db"] = "blablabla"; // <-- sesuaikan! } }
Itu baru contoh untuk database MySQL (yang sering digunakan) dan Oracle. Lalu bagaimana dengan database seperti MS SQL Server yang selama ini kita ketahui hanya cukup menggunakan parameter $info saja untuk menampung data ConnectionString-nya? Nah, di versi 12 ini, setting ConnectionString tersebut menggunakan kode seperti di bawah ini:
$info["connectionstring"] = "Provider=SQLNCLI10;Persist Security Info=False;Data Source=localhost;Initial Catalog=namadatabase;User Id=sa;Password=xxxx"; // ADO connection string, sesuaikan dengan kondisi di server Anda
Sedangkan kalau di versi 11 dan sebelumnya, kita dulu menggunakan:
$info = "Provider=SQLNCLI10;Persist Security Info=False;Data Source=localhost;Initial Catalog=namadatabase;User Id=sa;Password=xxxx"; // ADO connection string, sesuaikan dengan kondisi di server Anda
Wow, keren kan?
-
Penyesuaian Kode di Server Event Row_Rendered
Oke, selanjutnya… apa lagi ini? Hehe… jangan panik dulu.
Jadi begini. Kalau dulu di versi 11 dan sebelumnya, kita bisa mengubah data nilai dan teks dari option value Please select menjadi sesuai yang kita inginkan melalui server event Row_Rendered.
Seperti yang kita ketahui, nilai standar untuk option value tersebut adalah “” (string kosong), dan teks yang ditampilkan adalah Please select.
Kadang-kadang ada kebutuhan untuk mengubah nilai atau value string kosong tersebut misalnya menjadi 0 (nol), dan teks yang ditampilkan adalah – (satu tanda minus atau satu garis datar). Kode di server event Row_Rendered versi 11 dan sebelumnya adalah seperti ini:
$this->NamaFieldSaya->EditValue[0] = array("0", "-");
Mengenai hal ini Anda bisa melihat usulan saya kepada author PHPMaker melalui postingan berikut di forum diskusi mereka: Row_Rendered server event to adjust option value.
Karena kode tersebut tidak berpengaruh di versi 12, yang artinya, kode tersebut tidak memiliki hasil untuk mengubah nilai dari option value Please select tadi, maka sebagai solusinya kita harus mengubah kode di atas di versi 12 menjadi seperti ini:
$this->NamaFieldSaya->EditValue[0] = array("", "-");
lalu setelah itu, kita pun menambahkan kode jQuery berikut ke bagian Startup Script dari halaman Add atau Edit dari table yang bertalian:
$(document).ready(function() { var zero_select_option = $('<option></option>').attr("value", "0").text("-"); $("#x_NamaFieldSaya").empty().append(zero_select_option); });
Ngerti maksudnya kan? Hehehe… 😉
Maksudnya, karena sejak versi 12 PHPMaker sudah selalu menggunakan Ajax di field yang menggunakan control Combobox yang lookup ke table tertentu, maka kita harus menangani pilihan yang terpilih di control Combobox tadi menggunakan kode di sisi Client, yang dalam hal ini adalah kode jQuery.Selain itu, di versi 11, kita masih bisa menggunakan kode berikut ini untuk menampilkan nilai terpilih pada field yang menggunakan control Combobox sesuai keinginan kita pada server event Row_Rendered:
$this->NamaFieldSaya->CurrentValue = "1";
Nah, di versi 12 kode tersebut tidak lagi berfungsi sebagaimana mestinya. Artinya, kita harus menangani nilai yang terpilih di control Combobox tadi menggunakan kode jQuery di bagian Startup Script dari halaman yang bertalian:
$(document).on("updatedone", function(e, args) { if (args.target.id == "x_NamaFieldSaya") { $(args.target).val("1"); } });
Arti dari kode jQuery ini adalah, kita harus menunggu sampai jQuery selesai memperbarui (updatedone) semua nilai pada control Combobox yang menggunakan Ajax tadi, barulah kita bisa menampilkan nilai yang terpilih sesuai keinginan kita.
Belakangan, sejak versi 12.0.2 yang dirilis pada tanggal 24 Agustus 2015, PHPMaker sudah kembali menyesuaikan kode yang dibangkitkannya, sehingga kode di server event Row_Rendered tadi menjadi bisa digunakan kembali. Good job!
-
Perubahan Email Template dari Plain Text ke HTML
Kalau di versi 11 dan sebelumnya, PHPMaker menggunakan Email Template yang berbasis Plain Text. Sedangkan sejak versi 12, PHPMaker sudah meninggalkan jenis Email Template Plain Text tersebut, dan beralih ke format HTML. Akibatnya? Jika kita ingin membuat teks tertentu berada di baris baru, maka gunakan tag <br>.
Kalau menggunakan Email Template berbasis Plain Text, kita menggunakan karakter \n (back slash n) untuk membuat teks menjadi pindah ke baris berikutnya. Biasanya, konten Email yang bisa dikostumais ini sering kita atur melalui server event Email_Sending. Masih ingat? 😉
Tidak terlalu signifikan memang perubahan ini, dan tidak terlalu terkait secara langsung dengan kode PHP. Meskipun demikian, kalau kita tidak mengetahui perubahan ini, maka tetap saja kita akan bingung untuk mencari tahu penyebab mengapa data yang terdapat di dalam Body Email tidak pindah ke baris baru.
O iya, satu hal yang menggembirakan sekaligus dengan adanya perubahan ini, sekarang Email Template tersebut sudah mendukung multi-bahasa. Mengenai hal ini bisa Anda baca dari menu Help PHPMaker, pada topik Sending Email in Multi-Language yang terdapat di bawah topik Multi-Language Project.
Wow, semakin keren kan? 🙂
-
Penyesuaian Kode pada Server Event Page_Redirecting
Jika di versi 11, kita bisa hanya menggunakan kode berikut di server event Page_Redirecting yang terdapat di bawah lokasi Server Events -> Other -> Default Page untuk menentukan halaman standar (Default) yang akan ditampilkan ke Pengguna:
// Page Redirecting event function Page_Redirecting(&$url) { // Example: //$url = "your URL"; $url = "dashboard.php"; }
Kode tersebut di versi 11 akan ditangani dengan memeriksa apakah Pengguna sudah login atau belum. Jika halaman tersebut membutuhkan otentikasi Pengguna sebelum dapat mengaksesnya, maka sistem akan otomatis mengarahkan ke halaman Login, dan jika sudah berhasil login, sistem akan me-redirect Pengguna kembali kehalaman Dashboard tersebut.
Tapi ternyata kode tersebut tidak berfungsi lagi di versi 12. Kode di atas di versi 12 akan mengakibatkan terjadinya error redirect di browser. Oleh karena itu perlu disesuaikan dengan menambahkan pemeriksaan kondisi secara eksplisit apakah Pengguna sudah login atau belum. Jika belum, arahkan ke halaman Login, dan jika sudah, arahkan ke halaman Dashboard.
Penyesuaiannya di versi 12 menjadi seperti ini:
// Page Redirecting event function Page_Redirecting(&$url) { // Example: //$url = "your URL"; if (IsLoggedIn()) { $url = "dashboard.php"; } else { $url = "login.php"; } }
Oke, untuk sementara baru 6 poin ini saja yang ketahuan. Jika ada temuan-temuan baru lainnya, maka artikel ini akan saya perbarui. Jadi, sering-sering saja baca artikel ini jika Anda masih penasaran dengan perubahan kode antara versi 11 dan 12.
Nah, karena sekarang kita sudah tahu perbedaan/perubahannya, maka diharapkan tidak ada lagi kesulitan untuk beralih dari versi 11 ke versi 12. Sayang rasanya jika kita tidak beralih ke versi major berikutnya hanya karena takut jika seandainya Aplikasi Web yang dihasilkan menjadi tidak berjalan dengan mulus.
Ingatlah bahwa pasti selalu ada banyak keuntungan yang didapatkan ketika kita selalu mengikuti perkembangan PHPMaker dan menggunakan versi terakhir. Di samping penyempurnaan dari versi sebelumnya, banyak fitur-fitur hebat sekaligus fleksibel yang ditambahkan di versi terbaru, membuat PHPMaker merupakan satu-satunya tools Web Development yang masih terbaik dan termudah digunakan sampai saat ini.
Haree geneeee, masih penakut untuk move on? Hehehe… 🙂
Ryuki mengatakan
Bang boleh minta tolong nggak. Saya sedang bikin sales report online. Bakal panjang panjang lebar kalau dijelasin disini. Kiranya abang bisa bantu saya untuk bedah kasus. Kalau memang terlalu kompleks. Silahkan abang bisa minta harga. tolong email ke saya bexthy(at)gmaildotcom. Berikut link penjelasan Aplikasi yang saya butuhkan, saya jelasin dlm tabel excel agar lebih mudah. Link http://www.mediafire.com/view/5w5jfhji4d6jg59/Sales_Report.xlsx
Masino Sinaga mengatakan
Kalau untuk membuat Report yang komplit, saya sarankan pakai PHP Report Maker. Dicoba sendiri saja dulu ya, nanti kalau ada kesulitan baru saya coba bantu. Masalah harga, gampanglah itu, bisa diatur nanti.
Ryuki mengatakan
Ok bang saya coba dulu Report maker. Sebenernya udh lama coba phprunner tp hasilnya sprti yg sdh2 anda bilg.
Masino Sinaga mengatakan
Hehe, masih jauh lebih enak PHPMaker dan PHP Report Maker lah.
SW Yin mengatakan
Hi, I can’t find any contact in your ILovePHPMaker.com website so I have to come here to ask. I would like to purchase your Masino Extension but does it work if I’m using MSSSQL database? Does the script to create tables and Stored Procedures work in MSSQL?
Masino Sinaga mengatakan
Basically, you can use Masino Extensions for any database that supported by PHPMaker. The extensions do not create any Tables or Stored Procedures in database. The extensions will add some additional features into the generated web applications.
SW Yin mengatakan
Thank you for your reply.
The reason I asked is because of what I’ve read from the following link:
http://www.ilovephpmaker.com/phpmaker-extensions/step-by-step-to-implement-masino-extensions-in-a-new-project-of-phpmaker-10/
.. where it says:
“Run the provided SQL to generate some new tables and alter the users table,”
I’m not sure whether it is the same steps for PHPMaker 12 and the scripts applicable to Microsoft SQL Server too?
If you assure that it will work fine with any database supported by PHPMaker, I’ll get the company the purchase your Masino Extension.
Thank you
Masino Sinaga mengatakan
As mentioned in that article, the SQL script is provided only for MySQL database.
Please convert at the moment the tables from MySQL into MS SQL Server or to any other database engine using the database manager application, such as Navicat.
Thariq mengatakan
Pak Masino ini pencinta dan pejuang phpmaker, sudah sangat lama ingin kenalan sama bpk karena banyak kesulitan yg saya alami di forum phpmkr dituntaskan sama pak Masino. Saya cuma pemakai biasa pak, pengen seperti bpk yg terus konsisten di phpmkr, dan ilmunya berkembang tinggi se-level dewa, hehehe.
Ceritanya sy seempat beralih ke dunia asal framework MVC semisal CI dan zend akibat link phpmaker yg keliatan kurang gagah pak hehehehe, atau mungkin bpk ada arahan cara menyiasati link2 file .php hasil generator (routing mungkin) selain menggunakan iframe dan .htaccess pak.
Tapi walaupun ada masalah diatas, sekarang ini, seiring umur sudah menua kelihatannya pilihan phpmkr sudah jadi pilihan terakhir untuk pembuatan php web app bagi saya pak. Mohon arahan dan bimbingannya Pak Masino dan biarlah teman2 nyindir kita sebagai “programer generator” yg jelas phpmaker emang tiada duanya, maaf curhat dikit pak 😉
Masino Sinaga mengatakan
Wah, kayak jaman Orde Baru aja, pake “arahan dan bimbingan dari Bapak Presiden” hahaha…
Menyiasati link? Maksudnya URL-nya mirip seperti URL di WordPress itu ya? Wah, kalo itu saya gak terlalu berminat sih menyiasatinya. Saya lebih nyaman pakai URL asli bawaan hasil generate PHPMaker. Biarin aja dibilang orang URL-nya gak SEO friendly, saya mah gak peduli.
Eh, kok balik saya yang jadi curhat ya? Hahaha… 😀
Ridha mengatakan
wah saya jadi mulai tertarik belajar PHPmaker, tp baru kenal skarang, PHPMaker 12, dapatkah saya kursus private dengan pak masino? dan kontaknya pak untuk tanya2 dulu.
Masino Sinaga mengatakan
Anda bisa kursus private melalui website http://www.phpmakerlearning.com.
Anda juga bisa bertanya mengenai PHPMaker langsung ke saya melalui email setelah menjadi member di website http://www.ilovephpmaker.com.
Semoga dapat membantu.
Ardiyasa mengatakan
Siang Pa Masino,
saya pengguna php maker juga dan sudah mengimplementasikan di kantor saya dengan membuat beberapa aplikasi, saat ini saya sudah upgrade ke php maker 12 dan sudah menggunakan feature multiple database, saya sudah coba dan berhasil dalam satu aplikasi konek dengan 2 database dan berhasil,
tetapi saya mempunyai kendala pada saat konek 2 database dengan server yang berbeda. dbserver01 (mysql), dan dbserver02 (sqlserver).
saya sudah coba dengan menggunakan script seperti di bawah :
function Database_Connecting(&$info) {
// Example:
//var_dump($info);
//if (ew_CurrentUserIP() == “127.0.0.1”) { // testing on local PC
$info[“host”] = “dbsvr1”;
$info[“user”] = “paymentrequest”;
$info[“pass”] = “paymentrequest”;
$info[“db”] = “paymentrequest”;
} else {
$info[“connectionstring”] = “Provider=SQLNCLI10;Persist Security Info=False;
Data Source=dbsvr2;
Initial Catalog=dbapplication;
User Id=sa;
Password=1234”;
}}
}
saat ini saya tertarik mengikuti kursus online yang di adakan pa masino tapi masih dalam tahapan acc bos hehe..
mohon bantuannya pa untuk kasus di atas, terima kasih atas perhatiannya..
Masino Sinaga mengatakan
Tidak bisa seperti itu. Baik di localhost maupun di remote server, Anda juga harus menangani masing-masing dua setting koneksi Database tersebut.
Ardiyasa mengatakan
Pa Masino
misal nya saya mengikuti PHPMaker Learning apakah bisa request tema course contoh bagaimana caranya upload file ke excel.
dan apakah pembayaran nya bisa lewat trasfer cth via mandiri atau lainnya.
trims,
Masino Sinaga mengatakan
Request bisa-bisa saja, tapi belum tentu bisa langsung dipenuhi. Pembayaran untuk saat ini hanya tersedia lewat Paypal.