Sering kali seorang Web Developer dihadapkan kepada situasi di mana dia harus menambahkan kolom baru pada tabel yang terdapat di halaman List. Kolom baru ini berisi nilai yang tidak diambil dari dalam Database, tetapi (misalnya) dari hasil perhitungan kolom lain. Jadi, nilainya akan dibangkitkan bersamaan dengan saat tabel tersebut diproses oleh sistem lalu ditampilkan ke browser Pengguna.
Tidak terkecuali juga dengan Aplikasi Web yang dihasilkan oleh PHPMaker, pasti pernah mengalami tantangan ini. Yang menarik adalah, business-logic tersebut ternyata sangat mudah sekali diimplementasikan pada Aplikasi Web yang dihasilkan oleh PHPMaker, dibandingkan dengan Aplikasi Web yang dibuat secara manual ataupun dengan metode pengembangan lainnya. Mengapa? Karena Web Developer cukup hanya menambahkan sedikit kode saja dari bagian Server Events dan Client Scripts.
Tentu Anda penasaran ingin mengetahui caranya bukan? Jangan khawatir, karena di artikel ini kita akan mengupas tuntas langkah-langkahnya secara detail, bagaimana mengimplementasikan kebutuhan ini melalui sebuah project PHPMaker yang sangat sederhana menggunakan sebuah contoh Database MySQL dengan sebuah tabel saja di dalamnya.
Dalam contoh ini, katakanlah kita akan menampilkan nilai pada kolom yang baru tersebut berdasarkan hasil perhitungan dari kolom yang sudah ada sebelumnya. Selanjutnya, kita akan menampilkan hasil penjumlahan (TOTAL) nilai pada kolom baru tadi di bagian bawah tabel pada halaman List.
Silahkan ikuti langkah-langkah berikut dengan teliti!
- Pertama sekali, buatlah sebuah database MySQL, misalkan beri nama dengan customcolumn.
-
Jalankan script SQL berikut dalam database yang baru saja dibuat tadi untuk menghasilkan sebuah tabel bernama table1 dan beberapa Record di dalamnya:
-- ---------------------------- -- Table structure for table1 -- ---------------------------- DROP TABLE IF EXISTS `table1`; CREATE TABLE `table1` ( `Kode` int(255) NOT NULL AUTO_INCREMENT, `Description` varchar(50) DEFAULT NULL, PRIMARY KEY (`Kode`) ) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1; -- ---------------------------- -- Records of table1 -- ---------------------------- INSERT INTO `table1` VALUES ('1', 'One'); INSERT INTO `table1` VALUES ('2', 'Two'); INSERT INTO `table1` VALUES ('3', 'Three'); INSERT INTO `table1` VALUES ('4', 'Four'); INSERT INTO `table1` VALUES ('5', 'Five'); INSERT INTO `table1` VALUES ('6', 'Six'); INSERT INTO `table1` VALUES ('7', 'Seven');
- Seperti biasa, buat sebuah project PHPMaker baru, lalu hubungkan ke Database customcolumn tadi.
- Pastikan di panel Database sebelah kiri, Anda sudah memberi tanda centang pada satu-satunya tabel yang ada di sana.
- Sekarang klik tab Fields, lalu klik field Description. Pilih COUNT dari kolom List Page -> Aggregate. Tujuannya, untuk membuat fungsi perhitungan jumlah Record pada kolom Description di halaman List.
Langkah ini sebenarnya hanya trik untuk menampilkan baris di bagian bawah tabel. Jadi, baris tersebut merupakan tempat untuk meletakkan hasil perhitungan jumlah pada kolom baru yang akan kita buat di langkah selanjutnya. Oleh karena itu, pastikan Anda sudah melakukan langkah ini dengan benar.
-
Sampai di sini, kita sudah selesai melakukan pengaturan yang diperlukan pada sisi Field. Selanjutnya, kita melangkah ke bagian yang paling mengasyikkan, yaitu menambahkan hanya sedikit kode saja di bagian Server Events dan Client Scripts.
Lebih tepatnya, hanya pada dua buah server event dan sebuah client script. Kodenya pun hanya beberapa baris saja. Lagi-lagi, semoga Anda tidak kaget dengan kemampuan PHPMaker ini! Betapa simpel sekaligus dahsyatnya!
-
Sekarang, klik tab Code (Server Events, Client Scripts and Custom Templates), lalu tambahkan kode ini ke dalam server event ListOptions_Load yang terdapat di bawah Server Events -> Table-Specific -> List Page, sehingga kode selengkapnya seperti ini:
// ListOptions Load event function ListOptions_Load() { $opt = &$this->ListOptions->Add("new"); $opt->Header = "New"; $opt->OnLeft = FALSE; // Link on right $GLOBALS["Custom_Total"] = 0; }
Fungsi dari kode ini adalah untuk mempersiapkan sebuah kolom baru dengan ID kolom bernama new dan tulisan di bagian atas (header) kolom bernama New dan posisinya di sebelah kanan. Sedangkan di baris terakhir, kita juga mendeklarasikan sebuah variabel global yang akan digunakan untuk menghitung nilai di kolom yang baru ini nantinya.
-
Sekarang, klik tab Code (Server Events, Client Scripts and Custom Templates), lalu tambahkan kode ini ke dalam server event ListOptions_Rendered yang terdapat di bawah Server Events -> Table-Specific -> List Page, sehingga kode selengkapnya seperti ini:
// ListOptions Rendered event function ListOptions_Rendered() { if ($this->RowType <> EW_ROWTYPE_AGGREGATE) { $this->ListOptions->Items["new"]->Body = ($this->Kode->CurrentValue * 2); $GLOBALS["Custom_Total"] = $GLOBALS["Custom_Total"] + $this->ListOptions->Items["new"]->Body; } }
Ini merupakan kode utama dari yang sedang kita bahas di artikel ini. Fungsi dari kode ini adalah untuk menampilkan data di kolom baru dengan ID kolom new. Nilainya merupakan hasil perhitungan dari kolom atau field Kode dikalikan dengan 2. Ini hanya contoh sederhana saja.
Sedangkan di baris terakhir, kita menggunakan variabel global yang sebelumnya sudah dideklarasikan pada server event ListOptions_Load untuk menampung hasil perhitungan nilai di setiap baris.
Jadi, server event ListOptions_Rendered merupakan server event yang disediakan oleh PHPMaker untuk memudahkan Web Developer memproses nilai di baris pada kolom baru yang dibuat dengan menggunakan server event ListOptions_Load. Kedua server event ini sangat berkaitan erat.
-
Langkah selanjutnya, kita akan menambahkan hanya tiga baris kode jQuery berikut ke dalam Startup Script yang terdapat di bawah lokasi Client Scripts -> Table-Specific -> List Page:
$(document).ready(function() { $("#elf_table1_new").html("<?php echo $GLOBALS["Custom_Total"]; ?>"); });
Fungsi dari kode ini untuk menampilkan hasil perhitungan total nilai pada kolom yang baru tadi.
- Sekarang pastikan Anda sudah menyimpan hasil pekerjaan Anda pada project PHPMaker tersebut, lalu generate semua file script seperti biasa dengan menggunakan PHPMaker.
Setelah Anda selesai men-generate file-file script, maka silahkan jalankan Aplikasi Web tersebut melalui browser. Klik satu-satunya menu yang ada, yaitu table1, maka seharusnya sekarang Anda melihat ada sebuah kolom baru di bagian paling kanan yang bernama New. Nilai di kolom baru ini merupakan hasil perkalian nilai di kolom Kode dengan nilai 2.
Di bagian paling bawah tabel tersebut Anda akan melihat baris yang menampilkan hasil perhitungan, masing-masing di bawah kolom Description yang menunjukkan banyaknya Record, dan di bawah kolom New yang menunjukkan total nilai di kolom New tersebut. Tentu saja Anda dapat menambahkan Record baru untuk melihat perubahan pada baris TOTAL tersebut.
Lagi-lagi, untuk kesekian kalinya, dapat disimpulkan bahwa PHPMaker bukanlah hanya sekedar Tools PHP Code Generator yang selama ini masih banyak dianggap remeh atau sebelah mata oleh Web Developer. PHPMaker justru dapat membantu Anda untuk mengimplementasikan business-logic maupun business-process tertentu dengan sangat mudah, cepat, dan lagi-lagi menyenangkan! PHPMaker merupakan partner setia Anda yang sangat diandalkan kemampuan dan kefleksibelitasannya.
Satu lagi dari sekian banyaknya bukti yang meyakinkan kita bahwa PHPMaker sudah merupakan andalan Web Developer untuk saat ini dan trend di masa yang akan datang. 🙂
Rijal mengatakan
Bang Masino…
saya coba mengimplementasikan artikel yg ini http://www.masinosinaga.com/phpmaker/mudahnya-mengelola-data-yang-melibatkan-lebih-satu-table-melalui-phpmaker/
dgn tutorial diatas.
jadi beg-gini :
sy akan menambahkan kolom baru pd List Barang yaitu : (Jumlah) Barang yang ada pada tabel jual_barang / jumlah barang yg laku terjual.
sy sdh coba merubah kode pd tutorial di atas jadi sperti ini :
namun malah muncul pesan error sperti ini : Catchable fatal error: Object of class cField could not be converted to string …
kira2 apa penyebabnya ?
trimakasih.
Masino Sinaga mengatakan
Penyebabnya karena kode yang ini:
Seharusnya seperti ini (diasumsikan nama field yang valid adalah Kode_Barang dan bukan kode_barang):
Tolong Anda perhatikan penulisan sintaks nama field, meskipun Anda menggunakan sistem operasi Windows, selalulah disiplin menuliskan nama field (perhatikan huruf besar dan kecilnya!).
Rijal mengatakan
oke, siiip Bang Masino. skrg dh berhasil.
Trimakasih atas Sarannya.
Masino Sinaga mengatakan
Sama-sama. 🙂
im mengatakan
“#elf_table1_new” apakah harus seperti ini format/syntaxnya utk memanggil table?
Masino Sinaga mengatakan
Lebih tepatnya bukan memanggil table, tapi untuk mengakses id dari elemen field yang menyertakan nama table dan field-nya. Prefix “elf” merupakan singkatan dari “elemen field”, sedangkan dua parameter berikutnya masing-masing merupakan nama table dan field-nya. Itu format standar yang ditetapkan oleh PHPMaker.
im mengatakan
makasih Bang Masino.. !!! atas penejelasannya 🙂
im mengatakan
setelah saya terapkan ternyata muncul error “Notice: Undefined index: Custom_Total in C:\xampp\htdocs\sbms11\namalist.php on line 1677” setelah sy cek ternyata line tsb adalah “$GLOBALS[“Custom_Total”] = $GLOBALS[“Custom_Total”] + $this->ListOptions->Items[“new”]->Body;” salahnya dmn ya?
nama database = test
nama tabel = nama
field = namaid, nama
Masino Sinaga mengatakan
Pastikan code untuk variabel tersebut sudah ada di server event ListOptions_Load (lihat langkah nomor 7).
im mengatakan
sy menggunakan tips dari “http://www.masinosinaga.com/phpmaker/mudahnya-menampilkan-total-di-kolom-baru-pada-aplikasi-web-dari-phpmaker/”
Masino Sinaga mengatakan
Itu sebenarnya bukan pesan error, tapi hanya notice (pemberitahuan) saja.
Ubah kode ini:
menjadi:
atau Anda bisa juga Google “how to fix noticed undefined index in php”.
im mengatakan
makasih atas fast response nya Bang Masino!!!
tapi tetep notice tersebut muncul 😀
Masino Sinaga mengatakan
Google “how to fix noticed undefined index in php”.
im mengatakan
mohon maaf.. cerewet nih..
sebenarnya inti kesalahannya dmn ya Bang?
krn sy coba cth dr Bang Masino dgn PHPMaker yg sama jalan dgn baik
tapi saat sy coba terapkan di aplikasi yg lain muncul notice itu
Masino Sinaga mengatakan
Pastikan kode yang ini valid:
Pastikan nama field benar, karena userid di sana tidak sama dengan UserID (misalnya). Pastikan juga nilai untuk kolom new tersebut valid dan bisa dijumlahkan.
im mengatakan
sudah Bang..
tabel = user
field
userid = int(11)
Masino Sinaga mengatakan
Google “how to fix noticed undefined index in php”.
im mengatakan
sy sudah byk menerapkan dr byk artikel utk notice tsb tp hasilnya nihil.. mohon bantuan.. maaf sy pemula Bang Masino..
Masino Sinaga mengatakan
Coba ke artikel yang ini: http://siliconstation.com/how-fix-php-notice-undefined-index/
Di situ ada dua cara. Pertama menggunakan function isset() untuk memeriksa apakah variabel tersebut sudah diset dan tidak bernilai NULL.
Kedua, dengan mengabaikan error jenis notice (lihat di bagian bawah artikel tsb), Anda tinggal memanggil kode ini di file php:
im mengatakan
makasih Bang..!!!
Masino Sinaga mengatakan
Sama-sama. 🙂
im mengatakan
http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index
http://php.net/manual/en/language.operators.errorcontrol.php
im mengatakan
maaf Bang Masino..
sy sudah coba dengan
error_reporting(E_ALL ^ E_NOTICE); dan error_reporting(0); di akhir kode
dan sy juga sudah coba dgn function isset() tp notice msh muncul
mohon petunjuk
atau sy yg salah dlm penulisan?
Masino Sinaga mengatakan
Kalau begitu, Anda perlu mengeset-nya dari file php.ini di sisi web server yang Anda gunakan.
surianah mengatakan
pagi pak, saya ingin tanya..
kalau misalkan ada data:
table pendapatan, dengan field id, uang_masuk, tabungan, uang_parttime, tgl, totalmasukan
data kedua:
table pembelian, dengan field id, namabeli_barang, jumlahbrg, harga, tgl, totaluang_pembelian, sisa_uangtabungan
– bagaimana cara menambahkan table 1 yaitu uang_masuk, tabungan, uang_parttime masuk kedalam field totalmasukan
– bagaimana cara menambahkan table 2 yaitu namabeli_barang, jumlahbrg, harga, masuk kedalam field totaluang_pembelian
– bagaimana cara pengurangan totalmasukan – totaluangbeli masuk kedalam sisa_uangtabungan
terimakasih.
Masino Sinaga mengatakan
Untuk jawaban pertanyaan 1 dan 2, artikel berikut seharusnya bisa membantu meskipun tidak seratus persen sesuai dengan yang diinginkan, tapi logikanya mirip: Menampilkan Hasil Perhitungan pada Sisi Client di Aplikasi Web dari PHPMaker.
Sedangkan untuk jawaban pertanyaan 3, mirip dengan case pada artikel berikut: Mudahnya Memperbarui Total Detail di Tabel Master di Aplikasi Web dari PHPMaker.
Silahkan Anda sesuaikan dengan kebutuhan!
surianah mengatakan
maaf,
– bagaimana cara menambahkan table 2 yaitu jumlahbrg, harga, masuk kedalam field totaluang_pembelian
terimakasih
Masino Sinaga mengatakan
Lihat jawaban pada komentar saya sebelumnya di atas.
Azmi Fachir mengatakan
bang, kalo di database, gimana cara menggabungkan isi dari 2 kolom yang berada dalam 1 tabel?? misalkan saya membuat tabel barang, di tabel barang ada 2 kolom jumlah barang dan biaya. gimana cara menjumlahkan data di 2 kolom tsb??
Mohon penjelasannya.
Makasih.
Masino Sinaga mengatakan
Artikel berikut semoga bisa membantu: Menampilkan Hasil Perhitungan pada Sisi Client di Aplikasi Web dari PHPMaker.
Edi mengatakan
kalau cara menggabungkan dua field di List Page bagaimana ya ?
misal ada field hari dan filed tanggal , tapi tampilan di ListPage di jadikan satu Kolom saja ‘Hari’ .
Masino Sinaga mengatakan
Anda harus membuat satu kolom baru menggunakan server event ListOptions_Load, lalu gabungkan nilai dari kedua field pada setiap baris di kolom baru tadi pada server event ListOptions_Rendered.
Silahkan baca topik Server Events and Client Scripts dari menu Help PHPMaker untuk informasi dan contoh lebih lanjut.
Edi mengatakan
lalu kolom asli nya urk Kolom Hari dan Kolom Tanggal di List Page bisa dihilangkan juga?
Masino Sinaga mengatakan
Bukan PHPMaker namanya kalau tidak bisa menghilangkan kolom di halaman List, hehehe… 😀
Edi mengatakan
bagaimana ya caranya.
apakah sudah ada artikel nya di web ini ?
kok saya cari2 belum ketemu.
Masino Sinaga mengatakan
Ini dia artikelnya: Menyembunyikan Kolom di Tabel halaman List tapi Menampilkannya di Extended Search.
Andi mengatakan
pagi bang
sudah ane coba scriptnya, work bang :D, tapi bang ane khan coba2 ngga dikalikan, tapi ane bagi 2
hasilnya ada koma bang, :D, spt ini xxx.xxxxx
gimana cara ngilangin koma nya bang
makasih ye bang
Masino Sinaga mengatakan
Silahkan Google jquery round decimal to whole number.
angga mengatakan
pak tanya lagi 🙂 saya mengambil contoh output dari sini http://www.masinosinaga.com/phpmaker/mudahnya-menghitung-saldo-per-transaksi-di-aplikasi-web-dari-phpmaker/ saya modifikasi dikit
+—-+———————-+——————
| ID | Tanggal | A | B | C |
+—————————+——————-
| 1 | 2014-12 | 100 | 0 | 100 |
| 2 | 2014-12 | 250 | 0 | 350 |
| 3 | 2014-12 | 0 | 40 | 310 |
+—-+———————-+——————
| | 350 | 40 | 460 | total
+—————————+——————-
| | 116 | 13 | 153 | rata-rata
————————————————
kalau dari contoh diatas itukan menambah kolom pak , tapi bagaimana cara menambah footer table kebawah untuk hasil nilai rata-rata itu pak.
makasih pak
Masino Sinaga mengatakan
Anda bisa menggunakan server event Page_DataRendered untuk menampilkan konten di bagian bawah table pada halaman List. Silahkan baca topik Server Events and Client Scripts dari menu Help PHPMaker untuk informasi lebih lanjut.
angga mengatakan
siap pak saya coba dulu yah
angga mengatakan
saya sudah coba pak tapi munculnya dibawah pak. bukan dalam table bagian akhir seperti hitung sum, average & count 🙁
Masino Sinaga mengatakan
Iya memang seperti itu.
angga mengatakan
saya rubah dari tablelist.php bisa sih pak. tapi kendalanya nilai yg muncul pada AVERAGE ikutin setingan dari phpmaker pak TOTAL
Phrase(“TOTAL”) ?> saya paksa
Phrase(“AVERAGE”) ?> malah outputnya TOTAL
ibrahim mengatakan
siang pak masino…
pak gimana caranya hasil penjumlahan itu mucnul di tabel yang lain..
Masino Sinaga mengatakan
Pakai server event Row_Inserted dan/atau Row_Updated.
Baca topik Server Events and Client Scripts dari menu Help PHPMaker untuk contoh lebih lanjut.
Hanafi Ali mengatakan
Nanya pak, bagaimana jika kolom new sudah dibuat di table1. Nilai perhitungan dari kolom atau field Kode dikalikan dengan field new, kode nya seperti apa. trims
Masino Sinaga mengatakan
Nilai di field Kode dikalikan dengan field new, trus hasilnya mau ditampilkan di kolom yang mana dong?
Hanafi Ali mengatakan
hasilnya ditampilkan di kolom baru (misal jumlah) yang tidak diambil dari tabel1
Masino Sinaga mengatakan
Field “new” tadi dibuat dari sisi database atau menggunakan Custom Field?
Lalu field “baru” tadi itu dibuat dari sisi database atau menggunakan Custom Field?
dhea mengatakan
saya sudah coba trik abang dengan teliti selalu muncul
C:\laragon\www\tambah\models\Table1List.php(2132): Undefined constant “PHPMaker2023\contohtambahkurang\EW_ROWTYPE_AGGREGATE”
Masino Sinaga mengatakan
Kode di atas tidak 100% cocok untuk v2023. Coba ganti EW_ROWTYPE_AGGREGATE menjadi ROWTYPE_AGGREGATE, lalu coba lagi.