4 IMPLEMENTASI SISTEM
Pada bab ini akan dijelaskan mengenai implementasi sistem. Penjelasan implementasi sistem akan dibagi menjadi dua, yaitu modul admin dan user.
Berikut ini adalah penjelasan mengenai implementasi sistem 4.1 Implementasi Awal
Yang perlu dilakukan sebelum pembuatan aplikasi adalah melakukan instalasi webserver. Tahap instalasi yang akan dilakukan adalah sebagai berikut:
a. Xampp
b. Framework No-CMS
4.2 Instalasi No-CMS
Instalasi framework No-CMS dapat dilakukan dengan langsung menginputkan alamat website langsung setelah dipindahkan kedalam folder yang diinginkan. Akan keluar tampilan konfigurasi seperti pada Gambar 4.1 berikut ini.
Gambar 4.1. Instalasi No-CMS
4.3 Cara Kerja No-CMS
No-CMS menggunakan model MVC (model, view, controller) yang membagi sebuah halaman menjadi tiga file. Model ini berguna untuk merapikan struktur coding sehingga mudah dicerna, terutama untuk programmer yang berbeda. Ketika user ingin mengakses sebuah halaman, maka yang terpanggil pertama kali adalah controller, kemudian controller akan memanggil view yang merupakan tampilan dari sebuah halaman. Jika terdapat query dari database, maka controller dapat memanggil fungsi dari model dan kemudian variabelnya dapat diberikan kepada view untuk ditampilkan.
Terdapat sepuluh buah folder pada framework No-CMS yang memiliki fungsinya masing – masing. Folder pertama merupakan folder application yang berisi core system dari framework No-CMS. Folder kedua merupakan assets yang dapat berisi code tambahan seperti javascript, css maupun gambar yang diupload oleh user. Folder ketiga adalah license yang berisi mengenai lisensi dari framework No-CMS. Folder keempat adalah modules, modules ini adalah tempat programmer meletakkan pekerjaannya. Folder kelima adalah sistem yang berisi settingan website, library, dan lain – lain. Folder ketujuh adalah themes yang berisi css atau tampilan dari website.
Ada beberapa tahap untuk membuat sebuah halaman baru pada framework No-CMS. Pada awalnya programmer dapat membuat folder baru pada folder modules, yang kemudian diisi oleh subfolder config, controllers, models, dan views. Programmer juga harus membuat file module_config.php pada subfolder config dan file install.php pada subfolder controllers. Hal ini untuk melakukan konfigurasi untuk menginstall modul pada tahap selanjutnya. File module_config.php digunakan untuk membuat prefix pada tabel yang akan diakses didalam modul tersebut. Sedangkan file install.php digunakan untuk melakukan instalasi modul sehingga dapat digunakan. File install.php ini juga dapat di-setting untuk melakukan penambahan tabel pada database.
Selanjutnya programmer dapat membuat modul pada Module Management (terletak di CMS Management) dan mengisi letak folder modul baru yang ingin dibuat. Navigasi hanya dapat mengakses halaman yang sudah
Langkah terakhir programmer dapat membuat navigation pada menu Navigation Management (terletak di CMS Management) yang bisa diakses oleh admin. Navigation berguna agar halaman tersebut bisa diakses melalui website.
Navigation ini akan diarahkan letak file controller yang diletakkan didalam sebuah folder di modules.
4.4 Setting Login with social media
No-CMS telah menyediakan fitur login with social media dengan menggunakan plugin HybridAuth. Untuk mengakses setting daripada file HybridAuth, programmer dapat memasuki folder application -> config. Contoh setting file hybridauthlib.php dapat dilihat pada Segmen Program 4.1 dibawah ini.
Segmen Program 4.1. Setting HybridAuth
4.5 Modul Admin 4.5.1 Master Kategori
Halaman Master Kategori menggunakan library grocerycrud dicampur dengan beberapa fungsi dari No-CMS. Fungsi–fungsi yang terdapat pada halaman Master Kategori dapat dilihat pada Tabel 4.1 berikut ini.
Tabel 4.1. Fungsi Kategori No. Nama
Fungsi
Model yang diakses
Deskripsi Segmen Program
1 index - Untuk menginisiasi
halaman dan generate data kategori dilengkapi fungsi filter, add, dan edit (menggunakan grocerycrud)
Segmen Program 4.2
$auth_enable_facebook = TRUE;
$auth_facebook_app_id = '91239847584';
$auth_facebook_app_secret = 'dj21qn31inf23if234f';
$auth_enable_twitter = FALSE;
$auth_twitter_app_key = ‘’;
$auth_twitter_app_secret = ‘’;
Fungsi index
Fungsi index berisi seluruh data inisiasi, setting database, setting field yang akan ditampilkan, setting foreign key, setting tipe field, setting unique field, setting required field, dan lain - lain. Tidak diperlukan model untuk query dikarenakan library grocerycrud sudah sanggup memanggil data dari database dan langsung memberikan fitur seperti filter, add, edit, delete, print, dan lain – lain. Fitur ini dapat dikonfigurasi oleh programmer. Untuk lebih lengkapnya dapat dilihat di Segmen Program 4.2 berikut ini.
Segmen Program 4.2. Fungsi index master kategori
$crud->set_table($this->cms_complete_table_name('i_kategori'));
$crud->set_subject('Kategori');
$crud->columns('kategori_id', 'nama');
$crud->edit_fields('nama');
$crud->add_fields('nama');
$crud->display_as(‘kategori_id,'ID');
$crud->display_as('nama','Nama');
$crud->required_fields('nama');
$crud->unique_fields('nama');
$output = $crud->render();
$this->view($this->cms_module_path().'/manage_kategori_view', $output, $this->cms_complete_navigation_name('manage_kategori'));
4.5.2 Master Subkategori
Halaman Master Subkategori menggunakan library grocerycrud dicampur dengan beberapa fungsi dari No-CMS. Fungsi – fungsi yang terdapat pada halaman Master Kategori dapat dilihat pada Tabel 4.2 berikut ini.
Tabel 4.2. Fungsi Subkategori
No. Nama Fungsi Model
yang diakses
Deskripsi Segmen
Program
1 index - Untuk
menginisiasi halaman dan generate data subkategori dilengkapi fungsi filter, add, dan edit
(menggunakan grocerycrud)
-
2 _after_insert_or_update - Trigger untuk memanipulasi data atribut kategori yang memiliki relation dengan
subkategori yang ingin
ditambahkan / dimanipulasi
-
3 callback_field_atribut_kategori - Untuk
menampilkan data atribut kategori pada subkategori yang ingin dimanipulasi
Segmen Program 4.3
4 callback_column_atribut_kategori - Untuk
menampilkan jumlah data atribut kategori pada setiap subkategori yang ditampilkan di tabel
Segmen Program 4.4
Fungsi callback_field_atribut_kategori
Fungsi callback_field_atribut_kategori akan dipanggil oleh index ketika user ingin melakukan edit pada item tertentu. Fungsi ini akan melakukan query database atribut kategori apa sajakah yang memiliki relasi dengan primary key subkategori yang dipilih. Untuk lebih jelasnya dapat dilihat di Segmen Program 4.3 berikut ini.
Segmen Program 4.3. Fungsi callback_field_atribut_kategori
public function callback_field_atribut_kategori($value, $primary_key){
$module_path = $this->cms_module_path();
$this->config->load('grocery_crud');
if(!isset($primary_key)) $primary_key = -1;
$query =
$this->db->select('atribut_kategori_id,nama,tipe')
->from($this->cms_complete_table_name('i_atribut_kategori')) ->where('subkategori_id', $primary_key)
->get();
$result = $query->result_array();
$options = array();
$data = array(
'result' => $result, 'options' => $options);
Return $this->load->view($this-
>cms_module_path().'/field_subkategori_atribut_kategori',$data, TRUE);}
Fungsi callback_column_atribut_kategori
Fungsi callback_column_atribut_kategori akan dipanggil oleh index pada awal halaman dimana tabel akan ditampilkan. Fungsi ini akan melakukan query pada database persis seperti query pada fungsi callback_field_atribut_kategori namun pada fungsi ini hanya dilakukan perhitungan jumlahnya saja. Untuk lebih jelasnya dapat dilihat pada Segmen Program 4.4 berikut ini.
Segmen Program 4.4. Fungsi callback_column_atribut_kategori
Perpindahan data menuju view field_subkategori_atribut_kategori
Data atribut kategori yang merupakan detail dari subkategori akan di render dari view yang berbeda melalui callback, yaitu dari field_subkategori_atribut_kategori. Untuk penerimaan data dari halaman master subkategori dapat dilihat pada Segmen Program 4.5 berikut ini.
public function callback_column_atribut_kategori($value, $row){
$module_path = $this->cms_module_path();
$query = $this->db->select('atribut_kategori_id,nama,tipe')
->from($this->cms_complete_table_name('i_atribut_kategori')) ->where('subkategori_id', $row->subkategori_id)
->get();
$num_row = $query->num_rows();
// show how many records if($num_row>1){
return $num_row .' Atribut Kategori';
}else if($num_row>0){
return $num_row .' Atribut Kategori';}
else{return 'Tidak ada Atribut';}
}
Segmen Program 4.5. Field_subkategori_atribut_kategori
Pembuatan kolom baru pada view field_subkategori_atribut_kategori Pembuatan kolom pada field_subkategori_atribut_kategori tidak menggunakan grocerycrud, melainkan menggunakan html yang disisipkan pada variabel javascript. Sebagai contoh, pada Segmen Program 4.6 berikut ini akan terlihat bagaimana cara melakukan pembuatan field nama.
var OPTIONS_atribut_kategori = <?php echo json_encode($options); ?>;
var RECORD_INDEX_atribut_kategori = <?php echo $record_index; ?>;
var DATA_atribut_kategori = {update:new Array(), insert:new Array(), delete:new Array()};
var old_data = <?php echo json_encode($result) ; ?>;
for(var i=0; i<old_data.length; i++){
var row = old_data[i];
var record_index = i;
var primary_key = row['atribut_kategori_id'];
var data = row;
delete data['atribut_kategori_id'];
DATA_atribut_kategori.update.push({
'record_index' : record_index, 'primary_key' : primary_key, 'data' : data,
});
}
Segmen Program 4.6. Pembuatan kolom baru pada field_subkategori_atribut_kategori
4.5.3 Master Atribut Kategori
Halaman Master Atribut Kategori menggunakan library grocerycrud dicampur dengan beberapa fungsi dari No-CMS. Fungsi – fungsi yang terdapat pada halaman Atribut Kategori dapat dilihat pada Tabel 4.3 berikut ini.
Tabel 4.3. Fungsi Atribut Kategori
No. Nama Fungsi Model
yang diakses
Deskripsi Segmen
Program
1 index - Untuk
menginisiasi halaman dan generate data atribut kategori dilengkapi fungsi filter, add, dan edit
(menggunakan grocerycrud)
-
2 _before_delete - Trigger untuk
delete data choice atribut kategori yang memiliki relation dengan
subkategori yang ingin dihapus
Segmen Program 4.7
var field_value = '';
if(typeof(value) != 'undefined' && value.hasOwnProperty('nama')){
field_value = value.nama;}
component += '<td>';
component+='<input id =
"md_field_atribut_kategori_col_nama_'+RECORD_INDEX_atribut_kategori+'"
record_index="'+RECORD_INDEX_atribut_kategori+'"
class="md_field_atribut_kategori_col" column_name="nama" type="text"
value="'+field_value+'"/>';
component += '</td>';
Tabel 4.3. Fungsi Atribut Kategori (Sambungan)
No. Nama Fungsi Model
yang diakses
Deskripsi Segmen
Program 3 _after_insert_or_update - Trigger untuk
memanipulasi data choice atribut kategori yang memiliki relation dengan atribut kategori yang ingin ditambahkan / dimanipulasi
-
4 callback_field_atribut_kategori - Untuk
menampilkan data choice atribut kategori pada atribut kategori yang ingin
dimanipulasi
-
5 callback_column_atribut_kategori - Untuk
menampilkan jumlah data choice atribut kategori pada setiap
subkategori yang ditampilkan di tabel
-
Fungsi _before_delete
Fungsi _before_delete adalah sebuah trigger untuk melakukan delete terhadap choice atribut kategori yang berhubungan dengan atribut kategori yang ingin dihapus. Fungsi ini akan langsung melakukan query untuk menghapus choice atribut kategori, choice atribut kategori item, dan atribut kategori item berdasarkan primary key atribut kategori yang ingin dihapus. Lebih jelasnya dapat dilihat pada Segmen Program 4.7 berikut ini.
Segmen Program 4.7. Fungsi before_delete
4.5.4 Approve Item
Halaman Approve Item menggunakan library grocerycrud dicampur dengan beberapa fungsi dari No-CMS. Fungsi – fungsi yang terdapat pada halaman Approve Item dapat dilihat pada Tabel 4.4 dibawah ini.
Tabel 4.4. Fungsi Approve Item
No. Nama Fungsi Model
yang diakses
Deskripsi Segmen
Program
1 index - Untuk
menginisiasi halaman dan generate data item dilengkapi fungsi filter, edit (menggunakan grocerycrud)
-
2 _before_delete - Trigger untuk
delete data item picture yang memiliki relation dengan item yang ingin dihapus
-
public function _before_delete($primary_key){
// delete corresponding atributte
$this->db->delete($this-
>cms_complete_table_name('i_choice_atribut_kategori'),array('atribut_k ategori_id'=>$primary_key));
$this->db->delete($this-
>cms_complete_table_name('i_atribut_kategori_item'),array('atribut_kat egori_id'=>$primary_key));
$this->db->delete($this-
>cms_complete_table_name('i_choice_atribut_kategori_item'),array('atri but_kategori_id'=>$primary_key));
return TRUE;
}
Tabel 4.4. Fungsi Approve Item (lanjutan)
No. Nama Fungsi Model
yang diakses
Deskripsi Segmen
Program 3 _after_insert_or_update - Trigger untuk
memanipulasi data item picture yang memiliki relation dengan item yang ingin ditambahkan / dimanipulasi
-
4 callback_field_item_picture - Untuk
menampilkan data item picture pada item yang ingin dimanipulasi
-
5
callback_column_item_picture
- Untuk
menampilkan jumlah data item picture pada setiap item yang
ditampilkan di tabel
-
4.5.5 Approve Sales
Halaman Approve Sales menggunakan library grocerycrud dicampur dengan beberapa fungsi dari No-CMS. Fungsi – fungsi yang terdapat pada halaman Approve Sales dapat dilihat pada 0 berikut ini.
Tabel 4.5. Fungsi Approve Sales
No. Nama Fungsi Model yang diakses Deskripsi Segmen Program
1 index - Untuk
menginisiasi halaman dan generate data Shopping Cart dilengkapi fungsi filter dan edit (menggunakan grocerycrud)
-
2
get_user_bycart
get_user_bycart
(item_manager_model)
Untuk mendapatkan user_id pada Shopping Cart tertentu
-
3 send_message - Untuk
mengirimkan email notifikasi kepada pembeli dan penjual setelah sebuah Shopping Cart divalidasi
0
Fungsi send_message
Fungsi send_message adalah sebuah trigger ketika admin melakukan approval kepada sebuah Shopping Cart. Trigger ini dilakukan dengan pengecekan javascript pada view dan akan dipindahkan kepada controller. Fungsi pada controller dan pemanggilan pada view dapat dilihat berturut – turut pada 0 dan Segmen Program 4.9 berikut ini.
Segmen Program 4.8. Fungsi send_message pada controller
Segmen Program 4.9. Fungsi send message pada view
4.5.6 View Laporan Sales
Halaman View Laporan Sales menggunakan beberapa fungsi dari No-CMS digabung dengan plugin Google Chart. Fungsi – fungsi yang terdapat pada halaman View Laporan Sales dapat dilihat pada 0 berikut ini.
public function send_message(){
$shoppingcart_id = $this->input->get('shoppingcart_id');
$pembeli_nama = $this->input->get('pembeli_nama');
$pembeli_email = $this->input->get('pembeli_email');
$penjual_nama = $this->input->get('penjual_nama');
$penjual_email = $this->input->get('penjual_email');
$email_from_address = $this-
>cms_get_config('cms_email_reply_address');
$email_from_name = $this->cms_get_config('cms_email_reply_name');
$pembeli_email_subject = 'Pembayaran Anda Telah Diterima';
$pembeli_email_message = 'Kepada YTH '.$pembeli_nama.',<br /><br />
Terimakasih atas kepercayaannya menggunakan Marketplace.com<br /><br />Kami ingin menginformasikan bahwa pembayaran anda dengan nomor shopping cart SC'.$shoppingcart_id.', telah divalidasi oleh admin.<br /><br />Diharap kesabarannya menunggu pengiriman barang oleh
penjual.<br /><br />Terimakasih<br /><br /> Dikirim oleh Marketplace.com';
$pembeli_email_to_address = $pembeli_email;}
$.get('/marketplace/index.php/item_manager/confirm_cart/send_message', {'shoppingcart_id': $('#field-shoppingcart_id').html(),
'pembeli_nama': obj.get_user[0]['pembeli_nama'], 'pembeli_email':
obj.get_user[0]['pembeli_email'], 'penjual_nama':
obj.get_user[0]['penjual_nama'], 'penjual_email':
obj.get_user[0]['penjual_email']}, function(data) {});
Tabel 4.6. Tabel Laporan Sales No. Nama Fungsi Model yang
diakses
Deskripsi Segmen
Program
1 index - Untuk menginisasi
halaman
- 2 fill_sales Getsales
(report_model)
Untuk mendapatkan nominal sales pada setiap bulan
berdasarkan tahun tertentu (untuk ditampilkan pada grafik)
0, 0
Fungsi fill_sales
Fungsi fill_sales akan memberi input kepada Google Chart mengenai sales yang terjadi pada website. Sales ini akan dibagi menjadi 12 bulan dalam tahun tertentu. View akan memanggil fungsi pada controller yaitu fill_sales dilengkapi dengan tahun, kemudian fungsi fill_sales akan memanggil model get_sales yang akan melakukan query. Fungsi pada controller dan model berturut – turut dapat dilihat pada 0 dan 0 berikut ini.
Segmen Program 4.10. Fungsi controller fill_sales
public function fill_sales(){
$crud=$this->new_crud();
$this->load->model($this->cms_module_path().'/report_model');
$this->report_model = new report_model();
$year = $this->input->get('year');
$result['jan'] = $this->report_model->getsales(1, $year)...
$result['des'] = $this->report_model->getsales(12, $year);
echo json_encode($result);
}
Segmen Program 4.11. Fungsi Model fill_sales
Load Plugin Google Chart
Plugin Google Chart akan menerima dua macam data, melalui variabel data dan option. Variabel data akan menentukan grafik yang akan ditampilkan, sedangkan variabel option akan menentukan opsi tambahan yang akan ditampilkan. Cara load plugin secara lengkap dapat dilihat pada Segmen Program 4.12 berikut ini.
Segmen Program 4.12. Plugin Google Chart
public function getsales($month=0, $year=2014){
$query = $this->db->select('total')
->from($this->cms_complete_table_name('u_shoppingcart').' as shoppingcart')
->where('MONTH(a_confirm_date)',$month) ->where('YEAR(a_confirm_date)',$year) ->get();
$result = array();
$result = $query->result();
return $result;
}
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Month', 'Sales'],['Januari', totaljan] ...['Desember', totaldes]
]);
var options = {title: 'Company Sales Performance '+year+''};
var chart = new
google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
4.5.7 View Laporan Jumlah Sales
Halaman View Laporan Jumlah Sales menggunakan beberapa fungsi dari No-CMS digabung dengan plugin Google Chart. Fungsi – fungsi yang terdapat pada halaman View Laporan Jumlah Sales dapat dilihat pada Tabel 4.7 berikut ini.
Tabel 4.7. Fungsi Laporan Jumlah Sales No. Nama Fungsi Model yang
diakses
Deskripsi Segmen
Program
1 index - Untuk menginisasi
halaman
- 2 fill_jmlsales Getsales
(report_model)
Untuk mendapatkan jumlah sales pada setiap bulan berdasarkan tahun tertentu (untuk ditampilkan pada grafik)
-
4.5.8 View Laporan User Registration
Halaman View Laporan User Registration menggunakan beberapa fungsi dari No-CMS digabung dengan plugin Google Chart. Fungsi – fungsi yang terdapat pada halaman View Laporan User Registration dapat dilihat pada Tabel 4.8 berikut ini.
Tabel 4.8. Fungsi Laporan User Registration No. Nama Fungsi Model yang
diakses
Deskripsi Segmen Program
1 index - Untuk menginisasi
halaman
- 2 fill_user Getuser
(report_model)
Untuk mendapatkan jumlah user yang melakukan registrasi pada setiap bulan berdasarkan tahun tertentu (untuk ditampilkan pada grafik)
-
4.5.9 View Laporan Traffic
Halaman View Laporan User Registration menggunakan beberapa fungsi dari No-CMS digabung dengan plugin Google Chart. Fungsi – fungsi yang terdapat pada halaman View Laporan User Registration dapat dilihat pada Tabel 4.9 ini.
Tabel 4.9. Fungsi Laporan Traffic No. Nama Fungsi Model yang
diakses
Deskripsi Segmen
Program
1 index - Untuk menginisasi
halaman
- 2 fill_subkategori Getsubkategori
(report_model)
Untuk mendapatkan data subkategori
- 3 fill_view Getitemview
(report_model)
Untuk mendapatkan jumlah view
berdasarkan subkategori
-
4.6 Modul User 4.6.1 Browse Item
Halaman Browse Item menggunakan beberapa fungsi dari No-CMS.
Fungsi – fungsi yang terdapat pada halaman Browse Item dapat dilihat pada Tabel 4.10 berikut ini.
Tabel 4.10. Fungsi Browse Item
No. Nama Fungsi Model yang diakses Deskripsi Segmen Program
1 index - Untuk
menginisasi halaman
-
2 get_data get_data, get_data2, get_data3, get_data4 (item_model)
Untuk mendapatkan data item yang belum atau sudah difilter dan disorting
Segmen Program 4.13, Segmen Program 4.14, Segmen Program 4.15
Tabel 4.10. Fungsi Browse Item (Sambungan) No. Nama Fungsi Model yang diakses Deskripsi Segmen
Program 3 update_view update_view
(item_model)
Untuk menambah jumlah view setiap kali sebuah item di klik
Segmen Program 4.16
4 fill_comment Getcomment (item_model)
Untuk mendapatkan data item comment yang memiliki relasi dengan item tertentu
-
5 insert_comment insert_comment (item_model)
Untuk
menginputkan data item comment yang memiliki relasi dengan item tertentu
-
6 getuserid - Untuk
mendapatkan user id yang sedang login sekarang
-
7 fill_rating Getrating (item_model) Untuk mendapatkan data item rating yang memiliki relasi dengan item tertentu
-
8 insert_rating check_insert_rating (item_model)
Untuk
menginputkan data item rating yang memiliki relasi dengan item dan user tertentu
-
Tabel 4.10. Fungsi Browse Item (Sambungan) No. Nama Fungsi Model yang diakses Deskripsi Segmen
Program 9 insert_shoppingcart check_shoppingcart,
add_shoppingcart, add_shoppingcart_detail, check_item_kembar (item_model)
Untuk
menginputkan data item tertentu pada Shopping Cart
Segmen Program 4.17
10 fill_kategori Getkategori (item_model) Untuk mendapatkan data kategori
-
11 fill_subkategori Getsubkategori (item_model)
Untuk mendapatkan data
subkategori yang memiliki relasi dengan kategori tertentu
-
16 fill_provinsi Getprovinsi (item_model) Untuk mendapatkan data provinsi
-
17 fill_filter Getfilteritematribut (item_model)
Untuk mendapatkan data atribut kategori yang memiliki relasi dengan
subkategori tertentu
-
18 fill_filterchoice Getfilterchoiceitematribut (item_model)
Untuk mendapatkan data atribut kategori choice yang memiliki relasi dengan atribut kategori tertentu
-
19 fill_rekomendasi get_data_rekomendasi (item_model)
Untuk mendapatkan data item yang serupa dengan item tertentu
-
Fungsi get_data
Fungsi get_data dipanggil oleh view menuju controller dengan menggunakan ajax, kemudian controller akan memanggil model yang akan mengirimkan data query sesuai dengan inputan user. Data query akan diterima oleh controller dan dikirimkan kembali kepada view untuk ditampilkan. Fungsi pada view, controller, dan model berturut – turut dapat dilihat pada Segmen Program 4.13, Segmen Program 4.14, dan Segmen Program 4.15 berikut ini.
Segmen Program 4.13. Fungsi view fetch_more_data
function fetch_more_data(async){
if(typeof(async) == 'undefined'){async = true;}
$('#content-bottom').html('Load more item ...');
var keyword = $('#input_search').val();var filter =
$('#input_sort').val();var tipeitem = $('#input_tipe').val();
var $_GET = <?php echo json_encode($_GET); ?>;
var subkategori = $_GET['subkategori_id'];var kategori =
$_GET['kategori_id'];var cak = $_GET['cak_id'];
prov = provinsi;
kot = kota;
if(RUNNING_REQUEST){ REQUEST.abort();}
RUNNING_REQUEST = true;
REQUEST = $.ajax({
'url' : URL, 'type' : 'POST', 'async': async,
'data' : {'keyword' : keyword, 'filter' : filter, 'subkategori' : subkategori, 'kategori' : kategori, 'tipeitem' : tipeitem, 'cak' : cak,'prov' : prov, 'kot' : k ot, 'page' : PAGE, }, 'success' : function(response){
$('#record_content').append(response);
var bottom_content = 'No more item to show.';
$('#record_content_bottom').html(bottom_content);
RUNNING_REQUEST = false;
PAGE ++;}});}
Segmen Program 4.14. Fungsi controller get_data
public function get_data(){
$keyword = $this->input->post('keyword');
$subkategori = $this->input->post('subkategori');
$kategori = $this->input->post('kategori');
$filter = $this->input->post('filter');
$cak = $this->input->post('cak');
$kot = $this->input->post('kot');
$prov = $this->input->post('prov');
$tipeitem = $this->input->post('tipeitem');
$page = $this->input->post('page');
if($kot!=0){$daerah=2;$daerahid=$this->input->post('kot');}
elseif($prov!=0){$daerah=1;$daerahid=$this->input->post('prov');}
else{$daerah=0;$daerahid=0;}
$this->load->model($this->cms_module_path().'/item_model');
$this->item_Model = new item_Model();
if($keyword==''and $subkategori!='' and $cak!=''){$result = $this-
>item_Model->get_data4($keyword, $cak, $filter, $daerah, $daerahid,
$tipeitem, $page);}
elseif($keyword==''and $subkategori!=''){$result = $this ->item_Model-
>get_data2($keyword, $subkategori, $filter, $daerah, $daerahid,
$tipeitem, $page);}
elseif($keyword==''and $kategori!=''){$result = $this->item_Model-
>get_data3($keyword, $kategori, $filter, $daerah, $daerahid,
$tipeitem, $page);}
else{$result = $this->item_Model->get_data($keyword, $filter, $daerah,
$daerahid, $tipeitem, $page);}
$this->view($this-
>cms_module_path().'/browse_item_partial_view',$data,
$this->cms_complete_navigation_name('browse_item'), $config);
}
Segmen Program 4.15. Fungsi model get_data
public function get_data($keyword, $filter, $daerah, $daerahid,
$tipeitem, $page=0){
if($filter==0){$ordername = 'item.insert_date';$orderto = 'desc';}
elseif($filter==1){$ordername = 'item.insert_date';$orderto = 'asc';}
elseif($filter==2){$ordername = 'item.harga';$orderto = 'asc';}
elseif($filter==3){$ordername = 'item.harga';$orderto = 'desc';}
if($daerah==0){$wheredaerah='item.status_item';$isdaerah='a';}
elseif($daerah==1){$wheredaerah='kota.provinsi_id';$isdaerah=$daerahid
;}
elseif($daerah==2){$wheredaerah='user.kota_id';$isdaerah=$daerahid;}
if($tipeitem==0){$wheretipeitem='item.sta tus_item';$istipeitem='a';}
elseif($tipeitem==1){$wheretipeitem='item.tipe';$istipeitem='s';}
elseif($tipeitem==2){$wheretipeitem='item.tipe';$istipeitem='b';}
$query = $this->db->select('item.item_id, item.nama, item.tipe, item.picture1, item.harga, item. view, item.insert_date,
user.user_name as u_name,subkategori.nama as k_name, kota.nama as kota_nama, provinsi.nama as provinsi_nama')
from($this->cms_complete_table_name('i_item').' as item') ->join($this->cms_complete_table_name('i_subkategori').' as subkategori', 'item.subkategori_id=subkategori.subkategori_id', 'left')
->join($this->cms_complete_table_name('main_user').' as user', 'item.user_id=user.user_id', 'left')
->join($this->cms_complete_table_name('u_kota').' as kota', 'user.kota_id=kota.kota_id', 'left')
->join($this->cms_complete_table_name('u_provinsi').' as provinsi', 'kota.provinsi_id=provinsi.provinsi_id', 'left')
->where('item.status_item','a')
->where("(item.nama LIKE '%$keyword%')") ->where($wheredaerah,$isdaerah)
->where($wheretipeitem,$istipeitem) ->order_by($ordername,$orderto) ->limit(10, $page*10)
->get();
$result = $query->result();
return $result;}
Fungsi update_view
Fungsi update_view akan dijalankan ketika user mengklik item untuk menampilkan isi detil dari item. Fungsi ini akan mengakumulasi view yang ada dan ditambahkan satu. Untuk lebih jelasnya fungsi pada model update_view dapat dilihat pada Segmen Program 4.16 berikut ini.
Segmen Program 4.16. Fungsi update_view
Fungsi insert_shoppingcart
Fungsi insert_shoppingcart akan dijalankan ketika user mengklik tombol buy setelah modal detail item ditampilkan. Fungsi ini akan dibagi menjadi dua percabangan. Percabangan pertama adalah ketika tidak ditemukan Shopping Cart pada kedua user, maka akan dibuat Shopping Cart dan Detail Shopping Cart.
Percabangan selanjutnya adalah ketika Shopping Cart ditemukan pada kedua user, akan terdapat pengecekan item kembar terlebih dahulu, setelah pengecekan menunjukan tidak ada item kembar maka Detail Shopping Cart ditambahkan.
Fungsi pada controller dapat dilihat pada Segmen Program 4.17 berikut ini.
public function update_view($item_id=0){
$sql = "SELECT view FROM m_i_item WHERE item_id = ?";
$query = $this->db->query($sql,$item_id);
$hasil = array();
if($query->num_rows() > 0){
foreach($query->result_array() as $row){
$hasil['view'] = $row['view'] + 1;
} }
$array = array('view' => $hasil['view']);
$this->db->update($this-
>cms_complete_table_name('i_item'),$array,array('item_id' =>
$item_id));
}
Segmen Program 4.17. Fungsi insert_shoppingcart
public function insert_shoppingcart(){
$crud=$this->new_crud();
$this->load->model($this->cms_module_path().'/item_model');
$this->item_model = new item_model();
$item_id= $this->input->get('item_id');
$user_id_2 = $this->input->get('user_id_2');
$subtotal = $this->input->get('subtotal');
$harga = $this->input->get('harga');
$berat = $this->input->get('berat');
$user_id = $this->cms_user_id();
$result = $this->item_model->check_shoppingcart($user_id, $user_id_2);
if($result==0){
$result2 = $this->item_model->add_shoppingcart($user_id, $user_id_2);
$this->item_model->add_shoppingcart_detail(intval($result2), $item_id,
$harga, $subtotal, $berat);}
else{
$result2= $this->item_model->check_item_kembar($result, $item_id);
if($result2==0){$this->item_model-
>add_shoppingcart_detail(intval($result), $item_id, $harga,
$subtotal, $berat);}}
}
4.6.2 Pasang Item
Halaman Pasang Item menggunakan library grocerycrud dicampur dengan beberapa fungsi dari No-CMS. Fungsi – fungsi yang terdapat pada halaman Pasang Item dapat dilihat pada Tabel 4.11 dibawah ini.
Tabel 4.11. Fungsi Pasang Item No
.
Nama Fungsi
Model yang diakses
Deskripsi Segmen
Program
1 index - Untuk menginisiasi halaman
dan generate data item dilengkapi fungsi add dan edit (menggunakan
grocerycrud)
-
2 fill_kategori getkategori (pasang_item_m odel)
Untuk mendapatkan data kategori
-
3 fill_subkateg ori
getsubkategori (pasang_item_m odel)
Untuk mendapatkan data subkategori yang memiliki relasi dengan kategori tertentu
-
4 get_kategori get_data_kategor i
(pasang_item_m odel)
Untuk mendapatkan data kategori yang memiliki relasi dengan subkategori tertentu
-
5 fill_atribut_k ategori_choi ce
get_atribut_kate gori_choice (pasang_item_m odel)
Untuk mendapatkan data atribut kategori choice yang memiliki relasi dengan subkategori tertentu
-
6 fill_atribut_k ategori_choi ce_x
get_atribut_kate gori_choice_x (pasang_item_m odel)
Untuk mendapatkan data atribut kategori choice yang memiliki relasi dengan atribut kategori tertentu
-
7 fill_atribut_k ategori_fill
get_atribut_kate gori_fill
(pasang_item_m odel)
Untuk mendapatkan data atribut kategori fill yang memiliki relasi dengan subkategori tertentu
-
8 get_last_ite m_id
get_last_id (pasang_item_m odel)
Untuk mendapatkan data auto increment tabel item
Segmen Program 4.18 9 insert_atribu
t_kategori_c hoice
get_last_id, add_atribut_kate gori_choice (pasang_item_m odel)
Untuk menginputkan data atribut kategori choice pada sebuah item tertentu
-
Fungsi get_last_item_id
Fungsi ini digunakan untuk menginputkan data foreign key (item_id) atribut kategori item atau choice atribut kategori item Untuk mendapatkan id auto increment pada tabel item di database, fungsi get_last_item_id perlu memanggil fungsi get_last_id pada model. Untuk lebih jelasnya dapat dilihat pada Segmen Program 4.18 berikut ini.
Segmen Program 4.18. Fungsi get_last_id
4.6.3 View Profile
Halaman View Profile menggunakan beberapa fungsi dari No-CMS. Fungsi – fungsi yang terdapat pada halaman View Profile dapat dilihat pada Tabel 4.12 berikut ini.
Tabel 4.12. Fungsi View Profile No
.
Nama Fungsi Model yang diakses
Deskripsi Segmen
Program
1 index - Untuk menginisasi
halaman
-
2 user - Untuk menginisasi
halaman jika halaman yang dimasuki memiliki
backslash user
-
3 get_data get_data, get_data_testim oni
(profile_model)
Untuk mendapatkan data item dan testimoni yang dimiliki user tertentu
-
4 fill_profile fill_profile, getsales
(profile_model)
Untuk mendapatkan data user
-
function get_last_id() {
$sql = "SHOW TABLE STATUS LIKE 'm_i_item'";
$query = $this->db->query($sql);
$hasil = array();
if($query->num_rows() > 0){
foreach($query->result_array() as $row){$hasil =
$row['Auto_increment'];}}
return $hasil;}
Tabel 4.13. Fungsi View Profile No
.
Nama Fungsi Model yang diakses
Deskripsi Segmen
Program 5 find_usernam
e
find_username (profile_model)
Untuk mencari data username berdasarkan user_id seorang user
-
6 find_userid find_userid (profile_model)
Untuk mencari data user_id berdasarkan username seorang user
-
7 fill_about fill_about (profile_model)
Untuk mendapatkan data extra tab yang dimiliki user tertentu
-
8 fill_kategori_
user_rating
get_kategori_us errating
(profile_model)
Untuk mendapatkan data kategori user rating
-
9 fill_user_rati ng
get_userrating (profile_model)
Untuk mendapatkan jumlah rating untuk setiap kategori user rating pada user tertentu
0
10 insert_user_r ating
check_insert_us er_rating
(profile_model)
Untuk menginputkan data user rating pada kategori user rating dan user tertentu
0, Segmen Program 4.21, Segmen Program 4.22
Fungsi fill_user_rating
Untuk menampilkan rating daripada seorang user, terdapat dua kali pemanggilan dari view ke controller, untuk memanggil kategori rating dan rating itu sendiri. Hasil dari pemanggilan akan berbentuk gambar sesuai dengan rata – rata jumlah rating seorang user. Untuk lebih jelasnya dapat dilihat pada 0 berikut.
Segmen Program 4.19. Fungsi fill_user_rating
Fungsi insert_user_rating
Untuk mengisi data rating dari seorang user ke user lain maka akan dilakukan pemanggilan fungsi dari view (ketika sebuah dropdown rating diklik) menuju controller dan model. Contoh code pada view, controller, dan model dapat dilihat berturut – turut daripada 0 , Segmen Program 4.21, dan Segmen Program 4.22 berikut ini.
$.get('/marketplace/index.php/member/profile/fill_user_rating', {'user_id': userid, 'kategori_user_rating_id':
obj.kategori_user_rating[i]['kategori_user_rating_id']}, function(data) {
var obj2 =$.parseJSON(data);
var user_rating = 0;
var user_count = obj2.getcount_userrating;
$.each(obj2.get_userrating,function(j){user_rating = user_rating + parseInt(obj2.get_userrating[j]['rate']);});
var user_total = number_format(user_rating / user_count, 1, '.', '');
var user_totalcheck = number_format(user_rating / user_count, 0, '.', '');
if(user_totalcheck==1){$('#user_rate').append(rating_1);}
else if(user_totalcheck==2){$('#user_rate').append(rating_2);}
else if(user_totalcheck==3){$('#user_rate').append(rating_3);}
else if(user_totalcheck==4){$('#user_rate').append(rating_4);}
else if(user_totalcheck==5){$('#user_rate').append(rating_5);}
else{$('#user_rate').append(rating_0);}
});
Segmen Program 4.20. Fungsi view insert_user_rating
Segmen Program 4.21. Fungsi controller insert_user_rating
$('#'+obj.kategori_user_rating[i]['kategori_user_rating_id']+'_rating_
1').live('click',function(){
$.get('/marketplace/index.php/member/profile/insert_user_rating', {'rate': 1, 'user_id': userid, 'kategori_user_rating_id':
obj.kategori_user_rating[i]['kategori_user_rating_id']}, function(data) {
var obj =$.parseJSON(data);
location.reload();});
});
public function insert_user_rating(){
$crud=$this->new_crud();
$this->load->model($this->cms_module_path().'/profile_model');
$this->profile_model = new profile_model();
$kategori_user_rating_id = $this->input-
>get('kategori_user_rating_id');
$user_id= $this->input->get('user_id');
$rate = $this->input->get('rate');
$user_id_2 = $this->cms_user_id();
$result['user_rating'] = $this->profile_model-
>check_insert_user_rating($kategori_user_rating_id,
$rate,$user_id,$user_id_2);
echo json_encode($result);
}
Segmen Program 4.22. Fungsi model insert_user_rating
4.6.4 Shopping Cart
Halaman Shopping Cart menggunakan beberapa fungsi dari No-CMS.
Fungsi – fungsi yang terdapat pada halaman Shopping Cart dapat dilihat pada 0 berikut ini.
public function check_insert_user_rating($kategori_user_rating_id=0,
$rate=0,$user_id=0,$user_id_2=0){
$query = $this->db->select('rating.user_rating_id')
->from($this->cms_complete_table_name('u_user_rating').' as rating')
->where('rating.user_id',$user_id) ->where('rating.user_id_2',$user_id_2) -
>where('rating.kategori_user_rating_id',$kategori_user_rating_id) ->get();
$result = array();
if($query->num_rows() > 0){
$array = array('rate' => $rate);
$this->db->update($this-
>cms_complete_table_name('u_user_rating'),$array,array('kategori _user_rating_id' => $kategori_user_rating_id, 'user_id' =>
$user_id, 'user_id_2' => $user_id_2));
return "Update Rating Sukses";}
else{
$array = array('kategori_user_rating_id' =>
$kategori_user_rating_id, 'user_id' => $user_id , 'rate' => $rate, 'user_id_2' => $user_id_2);
$this->db->set($array);
$this->db->insert($this-
>cms_complete_table_name('u_user_rating'));
return "Penambahan Rating Sukses";}
}
Tabel 4.14. Fungsi Shopping Cart No
.
Nama Fungsi
Model yang diakses
Deskripsi Segmen
Program
1 index - Untuk menginisiasi halaman -
2 get_data get_data, get_data_detail (shopping_cart _model)
Untuk mendapatkan data Shopping Cart yang dibeli user tertentu (sisi pembeli)
-
3 update_qu antity
update_quantit y
(shopping_cart _model)
Untuk memanipulasi data kuantitas item tertentu pada sebuah Shopping Cart
-
4 delete_sho ppingcart
delete_shoppin gcart_detail (shopping_cart _model)
Untuk menghapus item tertentu pada sebuah Shopping Cart
-
5 confirm_s hoppingca rt
confirm_shopp ingcart
(shopping_cart _model)
Untuk menngubah status Shopping Cart menjadi konfirmasi penjual
-
6 confirm_s hoppingca rt_final
confirm_shopp ingcart_final (shopping_cart _model)
Untuk menngubah status Shopping Cart menjadi konfirmasi admin
-
7 confirm_s hoppingca rt_penerim aan
confirm_shopp ingcart_peneri maan
(shopping_cart _model)
Untuk menngubah status Shopping Cart menjadi sukses
-
8 count_sho ppingcart
count_shoppin gcart
(shopping_cart _model)
Untuk menghitung jumlah Shopping Cart yang memiliki status tertentu
-
9 get_shoppi ngcart
get_shoppingc art
(shopping_cart _model)
Untuk mendapatkan data Shopping Cart berdasarkan shoppingcart_id
-
Mengakses data JNE
Data JNE akan diakses menggunakan metode curl untuk mengoper data sehingga dapat diakses dalam bentuk php. Data kota pembeli dan penjual, data berat total juga dikirim terlebih dahulu. Untuk lebih jelasnya dapat dilihat pada
Segmen Program 4.23. Koneksi JNE
$ch = curl_init();
$url = "http://api.ongkir.info/cost/find";
$from = strtoupper($record->kota2nama);
$to = strtoupper($record->kota1nama);
$weight = $total_berat * 1000;
$params = array(
'from' => $from, 'to' => $to,
'weight' => $weight, 'courier' => 'jne', 'format' => 'json',
'API-Key' =>'fa73abe03841abe9068666060c586898');
// If its an array (instead of a query string)
if (is_array($params)){$params = http_build_query($params, NULL, '&');}
//set the url, number of POST vars, POST data curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST,TRUE);
curl_setopt($ch,CURLOPT_POSTFIELDS, $params);
curl_setopt($ch,CURLOPT_RETURNTRANSFER ,TRUE);
//execute post
$resultOngkir = curl_exec($ch);
$dataOngkir = json_decode($resultOngkir);
curl_close($ch);
4.6.5 Sales Cart
Halaman Sales Cart menggunakan beberapa fungsi dari No-CMS. Fungsi – fungsi yang terdapat pada halaman Sales Cart dapat dilihat pada Tabel 4.15 berikut ini.
Tabel 4.15. Fungsi Sales Cart No
.
Nama Fungsi
Model yang diakses
Deskripsi Segmen
Program
1 index - Untuk menginisiasi
halaman
- 2 get_data get_data,
get_data_detail (sales_cart_model )
Untuk mendapatkan data Shopping Cart yang dibeli user tertentu (sisi penjual)
-
3 confirm_sal escart
confirm_salescart (sales_cart_model )
Untuk mengubah status Shopping Cart menjadi konfirmasi final
-
4 confirm_sal escart_peng iriman
confirm_salescart _pengiriman (sales_cart_model )
Untuk mengubah status Shopping Cart menjadi konfirmasi penerimaan barang
-
5 count_sales cart
count_salescart (sales_cart_model )
Untuk menghitung jumlah sales cart yang memiliki status tertentu
-
6 get_city - Untuk mendapatkan kota
pada database JNE
-
7 get_cost - Untuk mendapatkan harga
pada database JNE berdasarkan jarak kedua kota
-