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. 🙂
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.
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!).
oke, siiip Bang Masino. skrg dh berhasil.
Trimakasih atas Sarannya.
Sama-sama. 🙂
“#elf_table1_new” apakah harus seperti ini format/syntaxnya utk memanggil table?
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.
makasih Bang Masino.. !!! atas penejelasannya 🙂
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
Pastikan code untuk variabel tersebut sudah ada di server event ListOptions_Load (lihat langkah nomor 7).
sy menggunakan tips dari “http://www.masinosinaga.com/phpmaker/mudahnya-menampilkan-total-di-kolom-baru-pada-aplikasi-web-dari-phpmaker/”
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”.
makasih atas fast response nya Bang Masino!!!
tapi tetep notice tersebut muncul 😀
Google “how to fix noticed undefined index in php”.
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
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.
sudah Bang..
tabel = user
field
userid = int(11)
Google “how to fix noticed undefined index in php”.
sy sudah byk menerapkan dr byk artikel utk notice tsb tp hasilnya nihil.. mohon bantuan.. maaf sy pemula Bang Masino..
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:
makasih Bang..!!!
Sama-sama. 🙂
http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index
http://php.net/manual/en/language.operators.errorcontrol.php
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?
Kalau begitu, Anda perlu mengeset-nya dari file php.ini di sisi web server yang Anda gunakan.
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.
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!
maaf,
– bagaimana cara menambahkan table 2 yaitu jumlahbrg, harga, masuk kedalam field totaluang_pembelian
terimakasih
Lihat jawaban pada komentar saya sebelumnya di atas.
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.
Artikel berikut semoga bisa membantu: Menampilkan Hasil Perhitungan pada Sisi Client di Aplikasi Web dari PHPMaker.
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’ .
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.
lalu kolom asli nya urk Kolom Hari dan Kolom Tanggal di List Page bisa dihilangkan juga?
Bukan PHPMaker namanya kalau tidak bisa menghilangkan kolom di halaman List, hehehe… 😀
bagaimana ya caranya.
apakah sudah ada artikel nya di web ini ?
kok saya cari2 belum ketemu.
Ini dia artikelnya: Menyembunyikan Kolom di Tabel halaman List tapi Menampilkannya di Extended Search.
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
Silahkan Google jquery round decimal to whole number.
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
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.
siap pak saya coba dulu yah
saya sudah coba pak tapi munculnya dibawah pak. bukan dalam table bagian akhir seperti hitung sum, average & count 🙁
Iya memang seperti itu.
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
siang pak masino…
pak gimana caranya hasil penjumlahan itu mucnul di tabel yang lain..
Pakai server event Row_Inserted dan/atau Row_Updated.
Baca topik Server Events and Client Scripts dari menu Help PHPMaker untuk contoh lebih lanjut.
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
Nilai di field Kode dikalikan dengan field new, trus hasilnya mau ditampilkan di kolom yang mana dong?
hasilnya ditampilkan di kolom baru (misal jumlah) yang tidak diambil dari tabel1
Field “new” tadi dibuat dari sisi database atau menggunakan Custom Field?
Lalu field “baru” tadi itu dibuat dari sisi database atau menggunakan Custom Field?
saya sudah coba trik abang dengan teliti selalu muncul
C:\laragon\www\tambah\models\Table1List.php(2132): Undefined constant “PHPMaker2023\contohtambahkurang\EW_ROWTYPE_AGGREGATE”
Kode di atas tidak 100% cocok untuk v2023. Coba ganti EW_ROWTYPE_AGGREGATE menjadi ROWTYPE_AGGREGATE, lalu coba lagi.