Advertisement
  1. Code
  2. OpenCart

Membangun Laporan Kustom di OpenCart

Scroll to top
Read Time: 7 min

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Tidak peduli apa pun bisnis yang Anda hadapi, selalu penting untuk memiliki alat yang membantu Anda menganalisis statistik keseluruhan kejadian sehari-hari. Tentu saja, itu juga membantu Anda membangun strategi lebih lanjut untuk bisnis Anda jika hal-hal tidak berada di jalur yang benar.

Hari ini, kita akan membahas alat pelaporan dalam konteks OpenCart. Anda akan menemukan banyak laporan yang berguna dalam inti itu sendiri. Ada empat kategori utama tepatnya—Sales, Products, Customers dan Marketing—dan masing-masing dari mereka memberikan lebih banyak opsi untuk melihat informasi dalam konteks yang berbeda.

Dalam contoh kita, kita akan membuat laporan yang menampilkan semua produk yang dilihat tetapi belum dibeli. Tentu saja, ini adalah kasus penggunaan yang sederhana, tetapi Anda dapat melanjutkan dan membuat yang lebih rumit sesuai kebutuhan Anda.

Saya berasumsi bahwa Anda menggunakan versi terbaru OpenCart dan akrab dengan proses pengembangan modul dasar di OpenCart, karena kita akan menekankan pembuatan laporan daripada langkah-langkah pengembangan modul dasar. Jika Anda ingin menjelajahi pengembangan modul dasar di OpenCart, ada artikel bagus tentang hal ini.

Pengaturan File Back-End

Mari mencantumkan file yang perlu diterapkan untuk laporan khusus kita:

  • admin/controller/report/product_custom.php: Ini adalah file controller utama yang digunakan untuk memuat data model dan mengatur variabel.
  • admin/model/report/product_custom.php: Ini adalah file model yang digunakan untuk mengatur kueri SQL untuk mengambil data dari database.
  • admin/view/template/report/product_custom.tpl: Ini adalah file view yang berisi logika presentasi.
  • admin/language/english/report/product_custom.php: Ini adalah file bahasa.

Controller

Lanjutkan dan buat file admin/controller/report/product_custom.php dengan konten berikut.

1
<?php
2
class ControllerReportProductCustom extends Controller {
3
    public function index() {
4
        $this->load->language('report/product_custom');
5
6
        $this->document->setTitle($this->language->get('heading_title'));
7
8
        if (isset($this->request->get['page'])) {
9
            $page = $this->request->get['page'];
10
        } else {
11
            $page = 1;
12
        }
13
14
        $url = '';
15
16
        if (isset($this->request->get['page'])) {
17
            $url .= '&page=' . $this->request->get['page'];
18
        }
19
20
        $data['breadcrumbs'] = array();
21
22
        $data['breadcrumbs'][] = array(
23
            'text' => $this->language->get('text_home'),
24
            'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')
25
        );
26
27
        $data['breadcrumbs'][] = array(
28
            'text' => $this->language->get('heading_title'),
29
            'href' => $this->url->link('report/product_custom', 'token=' . $this->session->data['token'] . $url, 'SSL')
30
        );
31
32
        $this->load->model('report/product_custom');
33
34
        $data['products'] = array();
35
36
        $filter_data = array(
37
            'start'                  => ($page - 1) * $this->config->get('config_limit_admin'),
38
            'limit'                  => $this->config->get('config_limit_admin')
39
        );
40
41
        $product_total = $this->model_report_product_custom->getTotalCustomProducts($filter_data);
42
43
        $results = $this->model_report_product_custom->getCustomProducts($filter_data);
44
45
        foreach ($results as $result) {
46
            $data['products'][] = array(
47
                'name'       => $result['name'],
48
                'model'      => $result['model'],
49
                'viewed'      => $result['viewed'],
50
            );
51
        }
52
53
        $data['heading_title'] = $this->language->get('heading_title');
54
55
        $data['text_list'] = $this->language->get('text_list');
56
        $data['text_no_results'] = $this->language->get('text_no_results');
57
        $data['text_confirm'] = $this->language->get('text_confirm');
58
59
        $data['column_name'] = $this->language->get('column_name');
60
        $data['column_model'] = $this->language->get('column_model');
61
        $data['column_viewed'] = $this->language->get('column_viewed');
62
63
        $data['entry_date_start'] = $this->language->get('entry_date_start');
64
        $data['entry_date_end'] = $this->language->get('entry_date_end');
65
66
        $data['token'] = $this->session->data['token'];
67
68
        $url = '';
69
70
        $pagination = new Pagination();
71
        $pagination->total = $product_total;
72
        $pagination->page = $page;
73
        $pagination->limit = $this->config->get('config_limit_admin');
74
        $pagination->url = $this->url->link('report/product_custom', 'token=' . $this->session->data['token'] . $url . '&page={page}', 'SSL');
75
76
        $data['pagination'] = $pagination->render();
77
78
        $data['results'] = sprintf($this->language->get('text_pagination'), ($product_total) ? (($page - 1) * $this->config->get('config_limit_admin')) + 1 : 0, ((($page - 1) * $this->config->get('config_limit_admin')) > ($product_total - $this->config->get('config_limit_admin'))) ? $product_total : ((($page - 1) * $this->config->get('config_limit_admin')) + $this->config->get('config_limit_admin')), $product_total, ceil($product_total / $this->config->get('config_limit_admin')));
79
80
        $data['header'] = $this->load->controller('common/header');
81
        $data['column_left'] = $this->load->controller('common/column_left');
82
        $data['footer'] = $this->load->controller('common/footer');
83
84
        $this->response->setOutput($this->load->view('report/product_custom.tpl', $data));
85
    }
86
}

Yang penting untuk dicatat di sini adalah bahwa kita menempatkannya di bawah direktori "report", yang merupakan tempat yang tepat untuk semua file yang terkait dengan laporan.

Selain itu, itu hal-hal controller yang biasa-biasa saja—kita memuat bahasa dan model yang sesuai dalam metode index, dan kemudian mengatur variabel. Pada akhirnya, kita telah menetapkan product_custom.tpl sebagai file template utama kita yang bertanggung jawab untuk keluaran laporan utama.

Model

Pindah lebih lanjut, mari kita mengatur file model di admin/model/report/product_custom.php.

1
<?php
2
class ModelReportProductCustom extends Model {
3
    public function getCustomProducts($data = array()) {
4
        $sql = "SELECT pd.name, p.model, p.viewed FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) 

5
        LEFT JOIN " . DB_PREFIX . "order_product op ON p.product_id = op.product_id

6
        WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.viewed > 0 

7
        AND ISNULL(op.product_id) ORDER BY p.viewed DESC";
8
9
        if (isset($data['start']) || isset($data['limit'])) {
10
            if ($data['start'] < 0) {
11
                $data['start'] = 0;
12
            }
13
14
            if ($data['limit'] < 1) {
15
                $data['limit'] = 20;
16
            }
17
18
            $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
19
        }
20
21
        $query = $this->db->query($sql);
22
23
        return $query->rows;
24
    }
25
26
    public function getTotalCustomProducts($data) {
27
        $sql = "SELECT count(*) as total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) 

28
        LEFT JOIN " . DB_PREFIX . "order_product op ON p.product_id = op.product_id

29
        WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.viewed > 0 

30
        AND ISNULL(op.product_id)";
31
32
        $query = $this->db->query($sql);
33
34
        return $query->row['total'];
35
    }
36
}

Ada dua metode dalam file model kita—getCustomProducts mengambil record yang sesuai dari database, sementara getTotalCustomProducts mengembalikan jumlah record total yang digunakan oleh komponen pagination di controller.

View

Selanjutnya, file view harus berada di admin/view/template/report/product_custom.tpl.

1
<?php echo $header; ?><?php echo $column_left; ?>
2
<div id="content">
3
  <div class="page-header">
4
    <div class="container-fluid">
5
      <h1><?php echo $heading_title; ?></h1>
6
      <ul class="breadcrumb">
7
        <?php foreach ($breadcrumbs as $breadcrumb) { ?>
8
        <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
9
        <?php } ?>
10
      </ul>
11
    </div>
12
  </div>
13
  <div class="container-fluid">
14
    <div class="panel panel-default">
15
      <div class="panel-heading">
16
        <h3 class="panel-title"><i class="fa fa-bar-chart"></i> <?php echo $text_list; ?></h3>
17
      </div>
18
      <div class="panel-body">
19
        <div class="table-responsive">
20
          <table class="table table-bordered">
21
            <thead>
22
              <tr>
23
                <td class="text-left"><?php echo $column_name; ?></td>
24
                <td class="text-left"><?php echo $column_model; ?></td>
25
                <td class="text-right"><?php echo $column_viewed; ?></td>
26
              </tr>
27
            </thead>
28
            <tbody>
29
              <?php if ($products) { ?>
30
              <?php foreach ($products as $product) { ?>
31
              <tr>
32
                <td class="text-left"><?php echo $product['name']; ?></td>
33
                <td class="text-left"><?php echo $product['model']; ?></td>
34
                <td class="text-right"><?php echo $product['viewed']; ?></td>
35
              </tr>
36
              <?php } ?>
37
              <?php } else { ?>
38
              <tr>
39
                <td class="text-center" colspan="4"><?php echo $text_no_results; ?></td>
40
              </tr>
41
              <?php } ?>
42
            </tbody>
43
          </table>
44
        </div>
45
        <div class="row">
46
          <div class="col-sm-6 text-left"><?php echo $pagination; ?></div>
47
          <div class="col-sm-6 text-right"><?php echo $results; ?></div>
48
        </div>
49
      </div>
50
    </div>
51
  </div> 
52
</div>
53
<?php echo $footer; ?>

Ini akan menampilkan daftar produk dengan cara tabular yang bagus, dan tentu saja itu responsif karena bootstrap ada di inti sekarang!

File Bahasa

Pada akhirnya, mari kita membuat file bahasa di admin/language/english/report/product_custom.php.

1
<?php
2
// Heading

3
$_['heading_title']     = 'Products Custom Report (Viewed but not purchased)';
4
5
// Text

6
$_['text_list']         = 'Products Custom List';
7
8
// Column

9
$_['column_date_start'] = 'Date Start';
10
$_['column_date_end']   = 'Date End';
11
$_['column_name']       = 'Product Name';
12
$_['column_model']      = 'Model';
13
$_['column_viewed']      = 'Viewed';
14
15
// Entry

16
$_['entry_date_start']  = 'Date Start';
17
$_['entry_date_end']    = 'Date End';

Jadi itu saja pengaturan file yang bersangkutan.

Memberikan Izin untuk Laporan Kustom

Meskipun kita sudah selesai dengan modul laporan kustom kita, Anda belum dapat mengaksesnya. Itu karena itu dianggap sebagai sumber daya baru dan kelompok pengguna administrator harus diizinkan untuk mengakses sumber daya ini. Oleh karena itu, mari lanjutkan dan berikan izin untuk sumber daya ini ke grup pengguna administrator.

Arahkan ke System > Users > Users Group dan edit grup pengguna Administrator. Di bawah kotak drop-down Access Permission, centang report/product_custom resource dan simpan grup tersebut.

Custom ReportCustom ReportCustom Report

Sekarang, Anda harus dapat mengakses sumber daya ini.

Cara Mengakses Laporan Kita di Back-End

Kita  perlu mengubah admin/view/template/common/menu.tpl untuk menyertakan tautan laporan kustom kita. Demi kesederhanaan, kita akan memodifikasinya secara langsung, tetapi Anda mungkin ingin mencapai yang sama menggunakan ekstensi OCMOD. Ini memungkinkan Anda untuk mengubah file inti menggunakan sistem pencarian/penggantian berbasis XML.

Sekarang, buka file admin/view/template/common/menu.tpl dan cari baris berikut.

1
<li><a href="<?php echo $report_product_purchased; ?>"><?php echo $text_report_product_purchased; ?></a></li>

Setelah baris itu, tambahkan baris berikut.

1
<li><a href="/index.php?route=report/product_custom&token=<?php echo $_SESSION['token']; ?>">Custom Report</a></li>

Sekarang Anda harus dapat melihat tautan kita di bawah Reports > Products. Klik itu untuk melihat laporan kustom kita yang luar biasa!

Custom Report LinkCustom Report LinkCustom Report Link

Ini mencantumkan semua produk yang dilihat dan belum dibeli. Jadi, itu saja yang menyangkut pembuatan laporan kustom; saya berharap itu tidak terlalu banyak sekaligus. Tetapi, bagaimanapun, Anda telah mendapatkan idenya, dan Anda dapat memperpanjangnya dengan mudah sesuai kebutuhan Anda.

Kesimpulan

Hari ini, kita telah membahas cara membuat laporan kustom di OpenCart. Kita telah melalui proses lengkap untuk menyiapkan file yang diperlukan, dan di bagian akhir artikel, kita menunjukkan cara mengakses laporan dari back-end.

Jika Anda mencari alat OpenCart tambahan, utilitas, ekstensi, dan sebagainya yang dapat Anda manfaatkan dalam proyek Anda sendiri atau untuk pendidikan Anda sendiri, jangan lupa untuk melihat apa yang kami miliki di marketplace.

Saya harap Anda telah menikmati semuanya sejauh ini dan terus memantau lebih lanjut tentang OpenCart. Jika ada pertanyaan dan saran, Anda dapat menghubungi saya melalui Twitter atau menggunakan umpan komentar di bawah ini.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.