Salah satu dari begitu banyaknya alasan dan fitur yang saya suka dari PHPMaker adalah pemakaian OOP (Object Oriented Programming) di dalam file script dari Aplikasi Web yang dihasilkannya. Seperti yang sudah kita ketahui, OOP merupakan gaya penulisan kode program yang berorientasikan kepada Object. Artinya, setiap sebuah entitas di dalam sistem akan diwakili oleh sebuah Object, dan setiap Object pasti memiliki beberapa Property dan Method di dalamnya.
Kelebihan utama dari OOP ini adalah kemudahan dalam penggunaan ulang sebuah Class yang sama, tapi dapat menghasilkan Object yang berbeda. Caranya bisa dengan meng-extend (mengembangkan) Class yang sudah ada, atau bisa juga dengan membuat instansiasi baru dari Class yang sudah ada. Tujuan akhirnya adalah supaya Programmer dapat mengekspos atau mengoptimalkan Property dan/atau Method yang terdapat di sebuah Object.
Istilah Property di dalam sebuah Object sering disamakan dengan istilah Sesuatu yang Dimiliki oleh Object itu. Bisa juga diartikan dengan Item Pengaturan yang nilainya bisa digunakan untuk menghasilkan fitur tertentu.
Sedangkan istilah Method di dalam sebuah Object sering disamakan dengan function yang ketika dipanggil akan melakukan aksi tertentu sesuai dengan kebutuhan.
Contoh, object Table yang merupakan instansiasi dari class cTable sudah barang tentu memiliki property berupa Field. Selain property Field, object Table juga memilik property dan method lainnya yang terdapat di dalamnya. Nah, Object Field itu sendiri pun sebenarnya berasal dari Class cField yang di dalamnya juga memiliki property dan method tertentu.
Di atas tadi kita menyebutkan istilah extends. Nah, kode PHP yang dihasilkan oleh PHPMaker mengenai hal ini bisa Anda lihat dalam file *info.php. Contoh, ketika Anda membuka file ordersinfo.php dengan aplikasi Text Editor seperti Notepad++, maka Anda akan melihat kode:
// // Table class for orders // class corders extends cTable {
Itu artinya, PHPMaker membuat class yang bernama corders, di mana class tersebut sebenarnya merupakan pengembangan (extends) dari class cTable.
Lalu jika Anda buka file orderslist.php dengan Notepad++, maka Anda akan melihat kode seperti ini:
class corders_list extends corders {
Itu artinya, PHPMaker membuat class yang bernama corders_list yang juga merupakan pengembangan (extends) dari class corders yang sebelumnya sudah dibuat pada file ordersinfo.php di atas.
Dengan kata lain, sebuah Class bisa merupakan hasil extends beberapa kali dari class-class sebelumnya. Mudah-mudahan gak bingung jika melihat contoh di atas tadi, ya?!
Sekarang mari kita kembali kepada manfaat dari sebuah Object. Tujuan utamanya adalah agar kita sebagai Web Developer dapat dengan mudah memanfaatkan Property dan Method yang terdapat di dalamnya. Nah, pertanyaannya adalah, bagaimana cara Web Developer mengetahui Property apa saja yang terdapat di dalam sebuah Object?
Jawabannya sangat mudah. Anda cukup menggunakan fungsi var_dump() yang artinya menge-dump semua variable yang terdapat di dalam sebuah Object tertentu. Panggil fungsi ini dari server event yang dapat mengekspos Property di dalamnya.
Contoh, kita ingin mengetahui Property apa saja yang dimiliki oleh Field Trademark yang terdapat di dalam table cars, maka Anda sebagai Web Developer cukup memanggil function var_dump() tadi dari server event Row_Rendered:
var_dump($this->Trademark);
maka Anda akan melihat hasilnya seperti ini:
object(cField)[6] public 'TblName' => string 'cars' (length=4) public 'TblVar' => string 'cars' (length=4) public 'FldName' => string 'Trademark' (length=9) public 'FldVar' => string 'x_Trademark' (length=11) public 'FldExpression' => string '`Trademark`' (length=11) public 'FldBasicSearchExpression' => string '`Trademark`' (length=11) public 'FldIsVirtual' => boolean true public 'FldVirtualExpression' => string '`EV__Trademark`' (length=15) public 'FldForceSelection' => boolean true public 'FldVirtualSearch' => boolean true public 'FldDefaultErrMsg' => string 'Incorrect integer' (length=17) public 'VirtualValue' => string '' (length=0) public 'TooltipValue' => string '' (length=0) public 'TooltipWidth' => int 0 public 'FldType' => int 3 public 'FldDataType' => int 1 public 'FldBlobType' => null public 'FldViewTag' => string 'FORMATTED TEXT' (length=14) public 'FldIsDetailKey' => boolean false public 'AdvancedSearch' => object(cAdvancedSearch)[7] public 'TblVar' => string 'cars' (length=4) public 'FldVar' => string 'x_Trademark' (length=11) public 'SearchValue' => null public 'SearchOperator' => null public 'SearchCondition' => null public 'SearchValue2' => null public 'SearchOperator2' => null public 'SearchValueDefault' => string '' (length=0) public 'SearchOperatorDefault' => string '' (length=0) public 'SearchConditionDefault' => string '' (length=0) public 'SearchValue2Default' => string '' (length=0) public 'SearchOperator2Default' => string '' (length=0) private '_Prefix' => string 'demo11_cars_advsrch_' (length=20) private '_Suffix' => string '_Trademark' (length=10) public 'Upload' => null public 'FldDateTimeFormat' => int -1 public 'CssStyle' => string '' (length=0) public 'CssClass' => string '' (length=0) public 'ImageAlt' => null public 'ImageWidth' => int 0 public 'ImageHeight' => int 0 public 'ImageResize' => boolean false public 'ResizeQuality' => int 100 public 'IsBlobImage' => boolean false public 'ViewCustomAttributes' => string '' (length=0) public 'EditCustomAttributes' => string '' (length=0) public 'LinkCustomAttributes' => string '' (length=0) public 'Count' => null public 'Total' => null public 'TrueValue' => string '1' (length=1) public 'FalseValue' => string '0' (length=1) public 'Visible' => boolean true public 'Disabled' => null public 'ReadOnly' => boolean false public 'TruncateMemoRemoveHtml' => null public 'CustomMsg' => string '' (length=0) public 'CellCssClass' => string '' (length=0) public 'CellCssStyle' => string '' (length=0) public 'CellCustomAttributes' => string '' (length=0) public 'MultiUpdate' => null public 'OldValue' => null public 'ConfirmValue' => null public 'CurrentValue' => string '8' (length=1) public 'ViewValue' => string 'Mercedes-Benz' (length=13) public 'EditValue' => string '' (length=0) public 'EditValue2' => null public 'HrefValue' => string 'http://www.mercedes.com' (length=23) public 'HrefValue2' => null public 'FormValue' => null public 'QueryStringValue' => null public 'DbValue' => string '8' (length=1) public 'Sortable' => boolean true public 'UploadPath' => string 'upload/' (length=7) public 'OldUploadPath' => string 'upload/' (length=7) public 'UploadAllowedFileExt' => string 'gif,jpg,jpeg,bmp,png,doc,xls,pdf,zip' (length=36) public 'UploadMaxFileSize' => int 2000000 public 'UploadMaxFileCount' => int 0 public 'UploadMultiple' => boolean false public 'UseColorbox' => boolean true public 'CellAttrs' => array (size=0) empty public 'EditAttrs' => array (size=0) empty public 'ViewAttrs' => array (size=0) empty public 'LinkAttrs' => array (size=1) 'target' => string '_blank' (length=6) public 'DisplayValueSeparator' => string ', ' (length=2) public 'PlaceHolder' => string 'Trademark' (length=9) public 'AutoFillOriginalValue' => boolean false public 'ReqErrMsg' => string 'Please enter required field - %s' (length=32) public 'Caption' => string '' (length=0) public 'Exportable' => boolean true
Tentu saja jika Anda membuka halaman List dari menu Cars atau carslist.php, maka Anda akan melihat output kode di atas sebanyak jumlah Record yang sedang ditampilkan di halaman List tadi. Jadi, jangan kaget Anda melihatnya, mengapa informasi tadi seperti diulang-ulang terus.
Bandingkan jika Anda membuka halaman carsview.php yang hanya menampilkan sebuah Record, maka hanya satu kali output kode di atas yang ditampilkan.
Nah, dari output kode hasil var_dump($this->Trademark) di atas, maka itu artinya kita sudah mengetahui Property apa saja yang terdapat di dalam object Field. Artinya lagi, kita bisa menggunakan atau bahkan mengganti nilai yang terdapat di dalamnya (tergantung kemampuan yang disediakan di setiap Property).
Contoh, saya bisa mengubah Caption dari sebuah Field di halaman yang menampilkan data Caption seperti di halaman List, Add, Edit, Search, dan sebagainya, cukup dengan menggunakan kode berikut di dalam server event Row_Rendered:
if ($this->Trademark->ViewValue == "BMW") { $this->Trademark->Caption = "My Trademark"; } else { $this->Trademark->Caption = $this->Trademark->FldName; }
Dalam contoh kode barusan, kita dapat mengganti nilai Caption atau label dari field Trademark hanya jika nilai data yang ditampilkan di field itu sama dengan BMW. Selain itu, maka nilai Caption field menggunakan nilai dari property FldName.
Saya sarankan agar Anda melakukan eksperimen dengan cara mengekspos setiap Property di atas, supaya Anda tahu perbedaan dan kemampuan dari setiap Property tadi.
Perlu diingat juga, bahwa pastikan Anda sudah menonaktifkan kode var_dump() tadi jika Aplikasi Web Anda sudah dalam mode Production. Jangan sampai Pengguna akhir Aplikasi Web Anda mengetahui dalamannya, hehehe… 😀
Mudah sekali, bukan? Luar biasa memang PHPMaker! 😀
Pak, kalo merubah Size dari sebuah Field apa bisa juga ?
jadi misal di Halaman Add size Field ‘Nama Customer’ = 30 (Default)
tetapi ketika di halaman Grid Add Size nya diubah menjadi 18,
Pakai jQuery untuk mengeset style atau CSS dari field tersebut berdasarkan ID elemennya.
Pak, maaf saya mau bertanya
Bisakah kita menambahkan class css untuk field tertentu?
jadi ketika row itu bertambah otomatis maker akan menambahkan class css untuk field itu(Kasus detail row ketika add master detail)
Tidak perlu menambahkan class css ke row pada bagian grid detail. Anda cukup mengoptimalkan property data-table dan data-field milik control yang bertalian dari bagian Client Scripts. Gunakan jQuery code untuk mengaksesnya.