Sekarang saya akan membuat postingan membuat chart statistik visitor dengan menggunakan framework Codeigniter dan library highcharts, pastinya para developer web sering mendapatkan project untuk membuat grafik untuk membuat laporan tahunan, bulanan atau harian agar bisa mentracking data, setelah saya cari kemana-mana ternyata ada yang mudah nih, yang pasti ada kemauan dan selalu usaha pasti ada jalan keluar.
Pertama yang pasti siapkan framework codeigniter yang sudah di atur confignya, dan download library highcharts, jangan lupa databasenya, kalo sudah siap yuk kita mulai:
untuk memudahkan saya akan kasih contoh table database nya, disini saya membuat database dengan nama grafik dengan tabel tbcounter;
CREATE TABLE IF NOT EXISTS `tbcounter` (
`ip` varchar(2050) NOT NULL,
`date` date NOT NULL,
`hits` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `tbcounter` (`ip`, `date`, `hits`) VALUES
('10.88.25.1', '2016-01-16', 11),
('10.88.25.2', '2016-01-16', 3),
('10.88.25.3', '2016-01-17', 4),
('10.88.25.4', '2016-01-16', 11),
('10.88.25.5', '2016-02-16', 3),
('10.88.25.6', '2016-02-17', 4),
('10.88.25.10', '2016-02-23', 2),
('10.88.25.15', '2016-02-23', 1),
('10.88.25.13', '2016-03-16', 11),
('10.88.25.1', '2016-03-16', 3),
('10.88.25.5', '2016-03-17', 4),
('10.88.25.8', '2016-03-16', 11),
('10.88.25.10', '2016-03-16', 3),
('10.88.25.19', '2016-03-17', 4),
('10.88.25.27', '2016-04-23', 2),
('10.88.25.50', '2016-04-23', 1),
('10.88.25.6', '2016-04-16', 3),
('10.88.25.9', '2016-05-17', 4),
('10.88.25.11', '2016-05-23', 2),
('10.88.25.12', '2016-05-23', 1),
('10.88.25.16', '2016-05-16', 11),
('10.88.25.20', '2016-05-16', 3),
('10.88.25.32', '2016-06-17', 4),
('10.88.25.1', '2016-06-16', 11),
('10.88.25.35', '2016-06-16', 3),
('10.88.25.36', '2016-07-17', 4),
('10.88.25.26', '2016-07-23', 2),
('10.88.25.6', '2016-07-16', 3),
('10.88.25.9', '2016-08-17', 4),
('10.88.25.11', '2016-08-23', 2),
('10.88.25.12', '2016-08-23', 1),
('10.88.25.16', '2016-08-16', 11),
('10.88.25.20', '2016-08-6', 3),
('10.88.25.32', '2016-09-17', 4),
('10.88.25.1', '2016-09-16', 11),
('10.88.25.35', '2016-09-16', 3),
('10.88.25.36', '2016-09-17', 4),
('10.88.25.26', '2016-09-23', 2),
('10.88.25.16', '2016-10-16', 11),
('10.88.25.20', '2016-10-16', 3),
('10.88.25.32', '2016-10-17', 4),
('10.88.25.1', '2016-10-16', 11),
('10.88.25.35', '2016-11-16', 3),
('10.88.25.36', '2016-11-17', 4),
('10.88.25.26', '2016-11-23', 2),
('10.88.25.15', '2016-11-23', 1),
('10.88.25.13', '2016-12-16', 11),
('10.88.25.1', '2016-12-16', 3),
('10.88.25.5', '2016-12-17', 4),
('10.88.25.8', '2016-12-16', 11),
('10.88.25.10', '2016-12-16', 3),
('10.88.25.19', '2016-12-17', 4),
('10.88.25.27', '2016-12-23', 2),
('10.88.25.50', '2016-12-23', 1),
('10.88.25.6', '2016-12-16', 3),
('10.88.25.9', '2016-12-17', 4),
('10.88.25.11', '2016-12-23', 2),
('10.88.25.12', '2016-12-23', 1),
('10.88.25.20', '2016-12-25', 1);
kita buat control dengan nama control_grafik.php
class control_grafik extends CI_Controller {
public function index() {
foreach($this->model_grafik->statistik_pengunjung()->result_array() as $row)
{
$data['grafik'][]=(float)$row['Januari'];
$data['grafik'][]=(float)$row['Februari'];
$data['grafik'][]=(float)$row['Maret'];
$data['grafik'][]=(float)$row['April'];
$data['grafik'][]=(float)$row['Mei'];
$data['grafik'][]=(float)$row['Juni'];
$data['grafik'][]=(float)$row['Juli'];
$data['grafik'][]=(float)$row['Agustus'];
$data['grafik'][]=(float)$row['September'];
$data['grafik'][]=(float)$row['Oktober'];
$data['grafik'][]=(float)$row['November'];
$data['grafik'][]=(float)$row['Desember'];
}
$this->load->view('view_grafik', $data);
}
selanjutnya kita buat model dengan nama model_grafik.php
class Model_grafik extends CI_Model{
function statistik_pengunjung()
{
$sql= $this->db->query("
select
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Month(date)=1)AND (YEAR(date)=2016))),0) AS `Januari`,
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Month(date)=2)AND (YEAR(date)=2016))),0) AS `Februari`,
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Month(date)=3)AND (YEAR(date)=2016))),0) AS `Maret`,
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Month(date)=4)AND (YEAR(date)=2016))),0) AS `April`,
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Month(date)=5)AND (YEAR(date)=2016))),0) AS `Mei`,
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Month(date)=6)AND (YEAR(date)=2016))),0) AS `Juni`,
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Month(date)=7)AND (YEAR(date)=2016))),0) AS `Juli`,
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Month(date)=8)AND (YEAR(date)=2016))),0) AS `Agustus`,
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Month(date)=9)AND (YEAR(date)=2016))),0) AS `September`,
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Month(date)=10)AND (YEAR(date)=2016))),0) AS `Oktober`,
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Month(date)=11)AND (YEAR(date)=2016))),0) AS `November`,
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Month(date)=12)AND (YEAR(date)=2016))),0) AS `Desember`
from tbcounter GROUP BY YEAR(date)
");
return $sql;
}
}
dan yang terakhir kita membuat view dengan nama view_grafik.php
<style>
#chart{
z-index:-10;}
</style>
<body>
<div id="chart">
</div>
<script src="<?php echo base_url();?>asset/highcharts/jquery.min.js" type="text/javascript"></script>
<script src="<?php echo base_url();?>asset/highcharts/highcharts.js" type="text/javascript"></script>
<script src="<?php echo base_url();?>asset/highcharts/modules/exporting.js" type="text/javascript"></script>
<script src="<?php echo base_url();?>asset/highcharts/modules/offline-exporting.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery(function(){
new Highcharts.Chart({
chart: {
renderTo: 'chart',
type: 'line',
},
title: {
text: 'Grafik Statistik pengunjung',
x: -20
},
subtitle: {
text: 'Count visitor',
x: -20
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun',
'Jul', 'Ags', 'Sep', 'Okt', 'Nov', 'Des']
},
yAxis: {
title: {
text: 'Total pengunjung'
}
},
series: [{
name: 'Data dalam Bulan',
data: <?php echo json_encode($grafik); ?>
}]
});
});
</script>
</body>
Nah setelah tahap diatas selesai silahkan tinggal running dilocalhost...hasilnya akan seperti dibawah ini...Tarataratatttaaaaaa...!!!!
selain itu tampilan juga bisa dieksport ke format .png dan .svg. untuk mempercantik bisa menambahkan themes dengan menambakan script
selain grafik model line basic anda juga bisa mengeksplor lagi grafik dengan model yang lain untuk lebih lanjut kunjungi highcharts.com, sekian postingan hari ini semoga bermanfaat untuk semuanya..
selain grafik model line basic anda juga bisa mengeksplor lagi grafik dengan model yang lain untuk lebih lanjut kunjungi highcharts.com, sekian postingan hari ini semoga bermanfaat untuk semuanya..
Demo
Semoga bermanfaat.
Makasih gan tutorialnya sangat bermanfaat bagi saya,
BalasHapussipp gan
BalasHapuskalo mau buat grafik dalam perhari nya gimana ?
BalasHapusbisa tinggal ganti quey model saja dan bikin loop tanggal per bulan
Hapusbisa di contohin ?
Hapussaya buat query gini tapi error :
"select
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Date(date)=1)AND (Month(date)=12)AND (YEAR(date)=2016))),0) AS `1`,
ifnull((SELECT count(ip) FROM (tbcounter)WHERE((Date(date)=2)AND (Month(date)=12)AND (YEAR(date)=2016))),0) AS `2`,
dst..
from tbcounter GROUP BY month(date) and YEAR(date)"
ini kenapa ya?
BalasHapusError Number: 1146
Table 'grafik.report' doesn't exist
SELECT * from report
Filename: C:/xampp/htdocs/ci5/system/database/DB_driver.php
Line Number: 691
dari error terlihat bahwa tabel grafik dengan field report tidak ada, coba gan di cek query nya
Hapuspermisi, maaf mau nanya,
BalasHapustutorialnya sudah saya ikutin, cuman tabelnya saya coba pakai tabel sendiri, grafiknya berhasil, tapi hasilnya 0 kenapa ya?
kalau tabel saya ada 5 kolom, apa query nya harus ada yang ditambah?
bisa kasih contoh query yang sudah dibuat??
Hapusmasih ngikutin yg ditutorial sihh..
BalasHapus$sql = $this->db->query("select
ifnull((SELECT count(kode_aktiva) FROM (perbaikan)WHERE((Month(tgl_masuk)=1)AND (YEAR(tgl_masuk)=2016))),0) AS `Januari`,
ifnull((SELECT count(kode_aktiva) FROM (perbaikan)WHERE((Month(tgl_masuk)=2)AND (YEAR(tgl_masuk)=2016))),0) AS `Februari`,
ifnull((SELECT count(kode_aktiva) FROM (perbaikan)WHERE((Month(tgl_masuk)=3)AND (YEAR(tgl_masuk)=2016))),0) AS `Maret`,
ifnull((SELECT count(kode_aktiva) FROM (perbaikan)WHERE((Month(tgl_masuk)=4)AND (YEAR(tgl_masuk)=2016))),0) AS `April`,
ifnull((SELECT count(kode_aktiva) FROM (perbaikan)WHERE((Month(tgl_masuk)=5)AND (YEAR(tgl_masuk)=2016))),0) AS `Mei`,
ifnull((SELECT count(kode_aktiva) FROM (perbaikan)WHERE((Month(tgl_masuk)=6)AND (YEAR(tgl_masuk)=2016))),0) AS `Juni`,
ifnull((SELECT count(kode_aktiva) FROM (perbaikan)WHERE((Month(tgl_masuk)=7)AND (YEAR(tgl_masuk)=2016))),0) AS `Juli`,
ifnull((SELECT count(kode_aktiva) FROM (perbaikan)WHERE((Month(tgl_masuk)=8)AND (YEAR(tgl_masuk)=2016))),0) AS `Agustus`,
ifnull((SELECT count(kode_aktiva) FROM (perbaikan)WHERE((Month(tgl_masuk)=9)AND (YEAR(tgl_masuk)=2016))),0) AS `September`,
ifnull((SELECT count(kode_aktiva) FROM (perbaikan)WHERE((Month(tgl_masuk)=10)AND (YEAR(tgl_masuk)=2016))),0) AS `Oktober`,
ifnull((SELECT count(kode_aktiva) FROM (perbaikan)WHERE((Month(tgl_masuk)=11)AND (YEAR(tgl_masuk)=2016))),0) AS `November`,
ifnull((SELECT count(kode_aktiva) FROM (perbaikan)WHERE((Month(tgl_masuk)=12)AND (YEAR(tgl_masuk)=2016))),0) AS `Desember`
from perbaikan GROUP BY YEAR(tgl_masuk)
");
dari query ga ada masalah, coba pada controller ubah script ini $this->load->view('view_grafik', $data); dengan echo json_encode($data); selanjutnya panggil di url http://localhost/project_anda/controllers_chart dan apakah ada nilai yg muncul pada json
Hapus{"pesan":[],"sum_pesan":0,"grafik":[0,0,0,0,0,0,0,0,0,0,0,0]}
BalasHapushasilnya seperti itu...
grafik":[0,0,0,0,0,0,0,0,0,0,0,0]} ini hasil json dari data per bulan berarti hasil query kosong tidak ada data nya, apa di database nya sudah di masukin data nya?dan untuk format tgl_masuk pada databse harus Y-m-d = 0000-00-00.
Hapusformat sudah sesuai, data di database juga ada isi...
BalasHapussaya bantu koreksi script nya. silahkan kirim script controllers, views dan model grafik nya... beserta contoh tabel database nya ke irwandwiyanto@cahbagusnongkrongweb.xyz
Hapuskalau format tidak sesuai cara mengatasinya gmn? data terlalu banyak jadi tidak mungkin mengubah manual
HapusBagaiman contoh nya bisa dijelaskan lebih detail??
Hapussudah saya kirim, terimakasih sebelumnya..
BalasHapushehehe... setelah di cek... database nya tgl_masuk tahun 2017 sedangkan query yg dibuat tgl_masuk tahun 2016 ya pasti kosong gk ketemu... coba di cek ulang
Hapusoh iya ternyata salah tahun, berarti kalau misal saya mau grafiknya sesuai tahun yang diinput tinggal nambahin where gitu ya..
BalasHapusini saya coba ganti query dari count jadi sum untuk total biaya, tapi range di garis vertikal nya berbahasa inggris, cara gantinya bagaimana?
dan kalau misal di kode :
yAxis: {
title: {
text: 'Total Pengeluaran Biaya'
}
},
series: [{
name: 'Total biaya pengeluaran dalam bulan Rp.',
data:
}]
yang sebelum echo data ada " : " menghilangkannya bagaimana?
Kalau datanya dari CSV bisa gak ya, atau jika sudah ada artikelnya bisa di share... trims
BalasHapusUntuk menggunakan data dari csv bisa dilakukan, mungkin ini bisa membantu Contoh menggunakan data CSV.
HapusTerima kasih mas, sangat bermafaat. Sekarang sudah bisa...
HapusMaaf gan, ko gak bisa ya malah tampil blank putih aja ?
BalasHapuscoba check jquery nya dan hisghchart.js nya
HapusMaaf apakah setiap yang mengunjungi web kita akan otomatis menambahkan di database nya atau engga? makasih sebelumnya
BalasHapusya bisa asalkan setiap login data disimpan pada databse,
Hapusgan punya saya kok tampilnya januari-desember trus sblah desember ada angka 12-23 seharusnya kan tampilnya cuman januari-desember
BalasHapusterima kasih sebelumnya
apa kah script nya dah benar kaya diatas?
Hapussama ane juga gan
Hapustambahin di controlernya $data="";
Hapusganti from tbcounter GROUP BY YEAR(date) jadi from tbcounter GROUP BY YEAR(CURDATE())
Hapussaya ko jadi double ya bulannya smpe 24 bulan
BalasHapusgan, sulit ga biar bisa ada selectbox per tahun?
BalasHapusikut nyimak
HapusBisa minta emailnya gan? karena domain cahbagusnongkrongweb.xyz sudah expire.
BalasHapuskalo mau buat grafik dalam perhari nya gimana ?
BalasHapus