Untuk Bagian Admin:
Sekarang kita masuk ke bagian admin. Menurut Saya, bagian admin inilah yang agak rumit (menurut pendapat saya, sih). Oke, keep stay tune on this tutorial, wohkey...
Untuk bagian admin juga, secara garis besar, file yang harus di-edit ada 3, yaitu:
- /admin/language/bahasa_kita/module/halo.php
- /admin/view/template/module/halo.tpl
- /admin/controller/module/halo.php
Misi kita kali ini adalah agar pada halaman edit modulnya agar seperti gambar di bawah ini:
cara_membuat_modul_opencart_1.GIF (18.8 KiB) Viewed 35348 times
Pertama, kita tentukan variabel-variabel yang akan digunakan di halaman admin untuk modul ini. Ubah file admin/language/bahasa_kita/module/halo.php
Code: Select all
<?php
// Heading
$_['heading_title'] = 'Halo';
// Teks
$_['text_module'] = 'Halo';
$_['text_success']= 'Berhasil: Anda berhasil mengubah modul Halo!';
$_['text_content_top']= 'Content Top - Atas';
$_['text_content_bottom'] = 'Content Bottom - Bawah';
$_['text_column_left']= 'Column Left - Kiri';
$_['text_column_right'] = 'Column Right - kanan';
// Entry
$_['entry_layout']= 'Layout:';
$_['entry_position']= 'Posisi:';
$_['entry_status']= 'Status:';
$_['entry_sort_order']= 'Urutan Pengurutan:';
// Error
$_['error_permission']= 'Peringatan: Anda tidak memiliki wewenang untuk mengubah modul Halo!';
?>
Kedua, kita ubah template yang ada di /admin/view/template/module/halo.tpl. Bagian inilah yang menurut pendapat saya agak rumit (karena membutuhkan skill desain yang mumpuni).
Kebetulan file yang mau saya edit ini agak sama dengan file template dari modul Information. Jadi saya hanya mengubah beberapa bagian saja. Dan kalau kita lihat sekilas perbedaannya menggunakan winDiff atau program "peng-compare-an" lainnya, terlihat perbedaannya hanya pada <div class="content"> saja. seperti yang saya ambil screenshotnya di bawah ini:
cara_membuat_modul_opencart_3.GIF (55.59 KiB) Viewed 35348 times
Tapi ini hanya pada kasus ini saja, modul yang lain seperti: bestseller & lainnya pasti lah berbeda. File /admin/view/template/module/halo.tpl-nya kita ubah seperti di bawah ini:
Code: Select all
<?php echo $header; ?>
<div id="content">
<div class="breadcrumb">
<?php foreach ($breadcrumbs as $breadcrumb) { ?>
<?php echo $breadcrumb['separator']; ?><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a>
<?php } ?>
</div>
<?php if ($error_warning) { ?>
<div class="warning"><?php echo $error_warning; ?></div>
<?php } ?>
<div class="box">
<div class="heading">
<h1><img src="view/image/module.png" alt="" /> <?php echo $heading_title; ?></h1>
<div class="buttons"><a onclick="$('#form').submit();" class="button"><?php echo $button_save; ?></a><a onclick="location = '<?php echo $cancel; ?>';" class="button"><?php echo $button_cancel; ?></a></div>
</div>
<div class="content">
<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form">
<table id="module" class="list">
<thead>
<tr>
<td class="left"><?php echo $entry_layout; ?></td>
<td class="left"><?php echo $entry_position; ?></td>
<td class="left"><?php echo $entry_status; ?></td>
<td class="right"><?php echo $entry_sort_order; ?></td>
<td></td>
</tr>
</thead>
<?php $module_row = 0; ?>
<?php foreach ($modules as $module) { ?>
<tbody id="module-row<?php echo $module_row; ?>">
<tr>
<td class="left"><select name="halo_module[<?php echo $module_row; ?>][layout_id]">
<?php foreach ($layouts as $layout) { ?>
<?php if ($layout['layout_id'] == $module['layout_id']) { ?>
<option value="<?php echo $layout['layout_id']; ?>" selected="selected"><?php echo $layout['name']; ?></option>
<?php } else { ?>
<option value="<?php echo $layout['layout_id']; ?>"><?php echo $layout['name']; ?></option>
<?php } ?>
<?php } ?>
</select></td>
<td class="left"><select name="halo_module[<?php echo $module_row; ?>][position]">
<?php if ($module['position'] == 'content_top') { ?>
<option value="content_top" selected="selected"><?php echo $text_content_top; ?></option>
<?php } else { ?>
<option value="content_top"><?php echo $text_content_top; ?></option>
<?php } ?>
<?php if ($module['position'] == 'content_bottom') { ?>
<option value="content_bottom" selected="selected"><?php echo $text_content_bottom; ?></option>
<?php } else { ?>
<option value="content_bottom"><?php echo $text_content_bottom; ?></option>
<?php } ?>
<?php if ($module['position'] == 'column_left') { ?>
<option value="column_left" selected="selected"><?php echo $text_column_left; ?></option>
<?php } else { ?>
<option value="column_left"><?php echo $text_column_left; ?></option>
<?php } ?>
<?php if ($module['position'] == 'column_right') { ?>
<option value="column_right" selected="selected"><?php echo $text_column_right; ?></option>
<?php } else { ?>
<option value="column_right"><?php echo $text_column_right; ?></option>
<?php } ?>
</select></td>
<td class="left"><select name="halo_module[<?php echo $module_row; ?>][status]">
<?php if ($module['status']) { ?>
<option value="1" selected="selected"><?php echo $text_enabled; ?></option>
<option value="0"><?php echo $text_disabled; ?></option>
<?php } else { ?>
<option value="1"><?php echo $text_enabled; ?></option>
<option value="0" selected="selected"><?php echo $text_disabled; ?></option>
<?php } ?>
</select></td>
<td class="right"><input type="text" name="halo_module[<?php echo $module_row; ?>][sort_order]" value="<?php echo $module['sort_order']; ?>" size="3" /></td>
<td class="left"><a onclick="$('#module-row<?php echo $module_row; ?>').remove();" class="button"><?php echo $button_remove; ?></a></td>
</tr>
</tbody>
<?php $module_row++; ?>
<?php } ?>
<tfoot>
<tr>
<td colspan="4"></td>
<td class="left"><a onclick="addModule();" class="button"><?php echo $button_add_module; ?></a></td>
</tr>
</tfoot>
</table>
</form>
</div>
</div>
<script type="text/javascript"><!--
var module_row = <?php echo $module_row; ?>;
function addModule() {
html = '<tbody id="module-row' + module_row + '">';
html += ' <tr>';
html += ' <td class="left"><select name="halo_module[' + module_row + '][layout_id]">';
<?php foreach ($layouts as $layout) { ?>
html += ' <option value="<?php echo $layout['layout_id']; ?>"><?php echo addslashes($layout['name']); ?></option>';
<?php } ?>
html += ' </select></td>';
html += ' <td class="left"><select name="halo_module[' + module_row + '][position]">';
html += ' <option value="content_top"><?php echo $text_content_top; ?></option>';
html += ' <option value="content_bottom"><?php echo $text_content_bottom; ?></option>';
html += ' <option value="column_left"><?php echo $text_column_left; ?></option>';
html += ' <option value="column_right"><?php echo $text_column_right; ?></option>';
html += ' </select></td>';
html += ' <td class="left"><select name="halo_module[' + module_row + '][status]">';
html += ' <option value="1" selected="selected"><?php echo $text_enabled; ?></option>';
html += ' <option value="0"><?php echo $text_disabled; ?></option>';
html += ' </select></td>';
html += ' <td class="right"><input type="text" name="halo_module[' + module_row + '][sort_order]" value="" size="3" /></td>';
html += ' <td class="left"><a onclick="$(\'#module-row' + module_row + '\').remove();" class="button"><?php echo $button_remove; ?></a></td>';
html += ' </tr>';
html += '</tbody>';
$('#module tfoot').before(html);
module_row++;
}
//--></script>
<?php echo $footer; ?>
Ketiga, untuk bagian /admin/controller/module/halo.php. Sebelumnnya kita lihat dulu hal-ihwal sebenarnya dari Class Controller (bisa lihat di
http://www.opencart.com/index.php?route ... h=77_43_45) hanyalah Class biasa yang hanya terdiri dari variabel $error & function index().
Code: Select all
<?php class ControllerModuleName extends Controller {
private $error = array();
public function index() {
}
} ?>
Kalo dilihat dari kebanyakan modul opencart yang sudah ada, Class ini hanya terdiri dari 2 fungsi, , yaitu:
fungsi index() & fungsi validate().
Fungsi index() biasanya yang untuk melakukan proses utama. Sedangkan fungsi validate() itu yang untuk memvalidasi apakah user itu memiliki permisi yang cukup atau tidak untuk mengubah-ubah pengaturan modul ini.
Dari contoh modul-modul yang sudah ada, Saya lihat kebanyakan modul menerapkan langkah-langkah seperti berikut:
- meload language
- meload model
- validasi permisi user
- isi variabel-variabel yang penting / yang akan digunakan di template
- buat breadcumbs
- inject variabel-variabel tadi yang sudah dibuat ke template
- render
Lebih baik, kita menggunakan pola yang sudah dibuat oleh modul-modul sebelumnya saja agar tidak repot, agar kita hanya tinggal mengganti & menambahkan yang diperlukan saja.
Untuk file controller modul Halo ini, setelah saya edit mencontoh dari modul Information, bentuknya seperti di bawah ini:
Code: Select all
<?php
class ControllerModuleHalo extends Controller {
private $error = array();
public function index() {
$this->load->language('module/halo');
$this->document->setTitle($this->language->get('heading_title'));
$this->load->model('setting/setting');
if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
$this->model_setting_setting->editSetting('halo', $this->request->post);
$this->session->data['success'] = $this->language->get('text_success');
$this->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));
}
$this->data['heading_title'] = $this->language->get('heading_title');
$this->data['text_enabled'] = $this->language->get('text_enabled');
$this->data['text_disabled'] = $this->language->get('text_disabled');
$this->data['text_content_top'] = $this->language->get('text_content_top');
$this->data['text_content_bottom'] = $this->language->get('text_content_bottom');
$this->data['text_column_left'] = $this->language->get('text_column_left');
$this->data['text_column_right'] = $this->language->get('text_column_right');
$this->data['entry_layout'] = $this->language->get('entry_layout');
$this->data['entry_position'] = $this->language->get('entry_position');
$this->data['entry_status'] = $this->language->get('entry_status');
$this->data['entry_sort_order'] = $this->language->get('entry_sort_order');
$this->data['button_save'] = $this->language->get('button_save');
$this->data['button_cancel'] = $this->language->get('button_cancel');
$this->data['button_add_module'] = $this->language->get('button_add_module');
$this->data['button_remove'] = $this->language->get('button_remove');
if (isset($this->error['warning'])) {
$this->data['error_warning'] = $this->error['warning'];
} else {
$this->data['error_warning'] = '';
}
$this->data['breadcrumbs'] = array();
$this->data['breadcrumbs'][] = array(
'text' => $this->language->get('text_home'),
'href' => $this->url->link('common/home', 'token=' . $this->session->data['token'], 'SSL'),
'separator' => false
);
$this->data['breadcrumbs'][] = array(
'text' => $this->language->get('text_module'),
'href' => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'),
'separator' => ' :: '
);
$this->data['breadcrumbs'][] = array(
'text' => $this->language->get('heading_title'),
'href' => $this->url->link('module/account', 'token=' . $this->session->data['token'], 'SSL'),
'separator' => ' :: '
);
$this->data['action'] = $this->url->link('module/account', 'token=' . $this->session->data['token'], 'SSL');
$this->data['cancel'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');
$this->data['modules'] = array();
if (isset($this->request->post['halo_module'])) {
$this->data['modules'] = $this->request->post['halo_module'];
} elseif ($this->config->get('halo_module')) {
$this->data['modules'] = $this->config->get('halo_module');
}
$this->load->model('design/layout');
$this->data['layouts'] = $this->model_design_layout->getLayouts();
$this->template = 'module/halo.tpl';
$this->children = array(
'common/header',
'common/footer'
);
$this->response->setOutput($this->render());
}
private function validate() {
if (!$this->user->hasPermission('modify', 'module/halo')) {
$this->error['warning'] = $this->language->get('error_permission');
}
if (!$this->error) {
return true;
} else {
return false;
}
}
}
?>
Kita lihat hasilnya di halaman Extensions ==> Module ==> Halo -> Edit. Kalo ga ada masalah, kita tambahkan modulnya di situ dan terapkan layout Home dan posisinya di atas saja (untuk mencoba dulu).
cara_membuat_modul_opencart_4.GIF (29.12 KiB) Viewed 35348 times
Kalau Kita lihat di halaman Home & terpampang modul seperti di bawah ini:
Berarti Kita sudah berhasil...
Merdeka...
Begitulah kira-kira dasar cara membuat modul di OpenCart.
Selesai...
Yang lain kalo ada yang ingin menambahkan, silahkan...
Cek juga di
http://www.opencart.com/index.php?route ... h=77_43_45