Tunggu Sebentar ...

Mengubah Redirect Setelah proses penyimpanan input produk - opencart. Duh bingung mau judulnya apa, tapi saya harap tahu maksud saya. Kalau masih belum ngeh maksud judul ini adalah tulisan ini tentang cara mengubah redirect atau pengarahan halaman setelah proses penyimpanan untuk input atau edit produk pada opencart.

Jadi, saya langsung kasih gambaran seperti ini, di halaman input produk pada opencart biasanya setelah kita menginput data produk, tentu ada proses penyimpanan data, supaya data input produk yang kita masukkan itu tampil di etalase halaman publik dan siap untuk di pajangkan gambar beserta harga dan deskripsi produk tersebut. Nah saat proses penyimpanan data tersebut, di opencart biasanya akan diarahkan ke halaman "view" atau tampil data lagi pada halaman admin. Ada yang salah ? ya tidak, memang default opencart ya begitu.


Nah ini adalah halaman form input produk

Ini adalah halaman view. Ada info dengan kotak warna hijau bertuliskan "Success: You have modified products! ", itu adalah informasi setelah proses penyimpanan atau mengubah data produk.

Namun, bagaimana jika kita ingin menginput produk kembali ? kalau secara default ya kita harus klik tombol tanda plus / tambah yang berwarna biru, supaya kita diarahkan ke halaman input produk. Lalu, bagaimana jika kita memiliki list 20 produk yang akan kita input ? dengan asumsi, setelah input produk lalu diarahkan ke halaman view atau tampil data produk, lalu klik lagi tombol add / tambah produk, lalu disimpan lagi, lalu diarahkan otomatis lagi ke halaman view tadi, lalu klik tombol add lagi. Efisien atau tidak ? ya ini tergantung orang-orang. Ada yang bilang kurang efisien, ada yang bilang ini engga mengganggu sama sekali.

Nah, saya buat catatan kecil ini untuk mengubah sedikit code tentang ketika kita input produk, dan proses penyimpanan data, tidak langsung diarahkan lagi ke halaman view atau tampil data, tetapi masih dihalaman input produk tersebut dengan form kosong kembali. Dalam hal ini saya mengubah code asli opencart. Tidak menggunakan OCMOD. Bisa pakai OCMOD untuk keperluan ini ? bisa, tapi catatan ini saya mengubah code core-nya langsung.

Lalu bagaimana jika ingin pakai OCMOD ? ya buat sendiri, saya cuma kasih contoh secara mengubah langsung core code nya. Kalau sudah tahu cara mengubah langsung, pasti tahu gimana cara mengubahnya dengan OCMOD.

1. Controller Product

Buka file controller untuk product, dengan nama file product.php. Bingung nyari folder dan file controller untuk product ? Misalnya url admin nya begini http://localhost:8080/oc2102/admin/index.php?route=catalog/product/add&token=8FbEwci5S3mYmAoDAVGqsL1nSMmDZVBf

Perhatikan bagian route nya catalog/product/add. Maka catalog itu adalah folder dari controller-nya, product itu adalah file controller-nya, berarti product.php, sedangkan add itu adalah ? hayo tebak sendiri ya. Oke, berarti file controller product berada pada folder admin/controller/catalog/ , nah di folder itu carilah file product.php

Nah karena kita ingin mengubah redirect setelah proses simpan saat input produk, maka kita harus ubah redirect pada add(). Cari public function add() { pada file product.php tadi. Seperti ini penggalan code controller product.php

<?php
class ControllerCatalogProduct extends Controller {
	private $error = array();

	public function index() {
		$this->language->load('catalog/product');

		$this->document->setTitle($this->language->get('heading_title'));

		$this->load->model('catalog/product');

		$this->getList();
	}

	public function add() {
		$this->language->load('catalog/product');

		$this->document->setTitle($this->language->get('heading_title'));

		$this->load->model('catalog/product');

		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) {
			$this->model_catalog_product->addProduct($this->request->post);

			$this->session->data['success'] = $this->language->get('text_success');

			$url = '';

			if (isset($this->request->get['filter_name'])) {
				$url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
			}

			if (isset($this->request->get['filter_model'])) {
				$url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
			}

			if (isset($this->request->get['filter_price'])) {
				$url .= '&filter_price=' . $this->request->get['filter_price'];
			}

			if (isset($this->request->get['filter_quantity'])) {
				$url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
			}

			if (isset($this->request->get['filter_status'])) {
				$url .= '&filter_status=' . $this->request->get['filter_status'];
			}

			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}

			if (isset($this->request->get['page'])) {
				$url .= '&page=' . $this->request->get['page'];
			}

			$this->response->redirect($this->url->link('catalog/product', 'token=' . $this->session->data['token'] . $url, 'SSL'));
		}

		$this->getForm();
	}

Nah code diatas adalah hanya penggalan dari code file product.php tadi. Saya ambil pada bagian "add" saja. Lalu coba cari code seperti dibawah ini

$this->response->redirect($this->url->link('catalog/product', 'token=' . $this->session->data['token'] . $url, 'SSL'));

Jika code nya belum pernah diapa-apain, sudah pasti tentu barisan code diatas terdapat pada baris 61 (itu untuk yang add, karena response->redirect tadi juga ada untuk bagian edit, cuma beda baris. Disini saya cuma sampai bagian add saja)

Nah sekarang gampang kalau sudah ketemu, kita edit saja pada bagian ini

$this->url->link('catalog/product' menjadi <strong>$this->url->link('catalog/product/add' 

Sehingga menjadi code nya seperti ini
$this->response->redirect($this->url->link('catalog/product/add', 'token=' . $this->session->data['token'] . $url, 'SSL'));

Lalu simpan code product.php tersebut. Sebelumnya, backup dulu ya file product.php tadi. Buat jaga-jaga jika ada error, masih bisa dikembalikan atau menggunakan file lama.

Nah sekarang coba kita uji menyimpan produk, apakah setelah proses penyimpanan produk, ia akan ngelink atau diarahkan ke halaman view product atau ke halaman input produk lagi. Gambar dibawah ini adalah input produk setelah proses diubah code seperti diatas.

Gambar diatas adalah form input, saya masukkan data sebagai contoh nama produknya kaos programmer 2. Lalu setelah itu saya klik tombol simpan, pertanyaannya, apakah akan redirect ke halaman input produk itu lagi atau masih seperti default nya opencart (redirect ke halaman view product) ?

Gambar diatas adalah redirect halaman setelah proses penyimpanan pada form input produk diatas tadi. Jadi sampai disini sudah cukup berhasil. Tapi tunggu dulu, ada yang kurang. Yaitu informasi mengenai "sukses" bahwa input telah berhasil mana ? Nah maka dariitu, ini belum selesai total.

Masih di file product.php tadi, sekarang kita cari code dibawah ini

if (isset($this->error['name'])) {

yak, adanya di baris 642, seperti gambar dibawah ini. Code tersebut berada didalam function getForm() {

Lalu, letakkan code dibawah ini, sebelum code  if (isset($this->error['name'])) { tadi

if (isset($this->session->data['success'])) {
      $data['success'] = $this->session->data['success'];
      unset($this->session->data['success']);
} else {
     $data['success'] = '';
}

Sehingga code menjadi seperti gambar dibawah ini : (yang dikotakkan warna merah adalah code yang baru ditambahkan)

Setelah itu simpan file product.php tadi. Nah selanjutnya, untuk menampilkan info sukses setelah input tadi, maka perlu mengubah juga code untuk template-nya atau ekstensi filenya itu .tpl (dot tpl).

2. View Product

Untuk view product ini terdapat path nya di admin/view/template/catalog/ nah di folder tersebut cari file "product_form.tpl". Jika sudah ketemu file tersebut, sekarang dibuka file tersebut. Cari code dibawah ini :

<?php if ($error_warning) { ?>

Lalu sisipkan diatasnya code diatas dengan code dibawah ini :

<?php if ($success) { ?>
<div class="alert alert-success"><i class="fa fa-check-circle"></i> <?php echo $success; ?>
       <button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
<?php } ?>

Jadi code-nya seperti gambar dibawah ini :

Lalu, simpan file product_form.tpl tadi. Setelah itu kita uji coba, dengan cara menginput produk. Dibawah ini adalah capture halaman input produk dan redirect setelah proses penyimpanannya, apakah sudah ada informasi bahwa sukses proses penyimpanannya ?

Gambar diatas adalah form input produk, setelah diinput produk-nya, maka akan diproses simpan.

Setelah input form produk tadi, maka akan diredirect ke halaman input produk (Setelah diubah code-nya). Dan pada gambar diatas, sudah muncul informasi mengenai sukses proses penyimpanannya.

Selanjutnya, kalau sudah gini, tinggal lebih mudah untuk menginput produk berikutnya, tidak perlu lagi seperti default-nya, yang diredirect ke halaman view product, lalu klik tombol tambah untuk input produk lagi, begitu seterusnya, kebanyakan redirect. Tapi ini sifatnya optional. Kalau mau kayak gini ya monggo, kalau mau kayak bawaaan opencart-nya ya monggo.

 

Nb :

1. sebelumnya, backup dulu file-file yang terkait atau yang akan diubah.
2. Pada contoh ini saya menggunakan opencart Version 2.1.0.2.

Ditumpuk didalam berkas : Catatan Belajar , PHP , Opencart
Yang berkomentar (4)
Setiap komentar yang tampil adalah hasil dari persetujuan Admin

Komentar untuk "Mengubah Redirect Setelah Proses Penyimpanan Input Produk - Opencart"

fauzan
02-03-2016 22:11

gan yang di contohkan cuma yg general,bagaimana dengan kolom data,links dst...apa sama?maksudnya apa bisa di isi dulu semua yang diperlukan termasuk gambar, terus baru simpan gitu ya?

Komentar via web

Balas
Danni Moring
02-03-2016 22:20

kalau isi form ya seperti biasa...termasuk tab "data", "link", dll..... perhatikan di form, kan ada tanda bintang warna merah, nah itu wajib diisi...jadi ditab data periksa juga, apaah ada tanda bintang atau engga, kalau ada, sudah tentu kalau maksa di save tapi belum diisi, ya pasti ada warning...dan selain yang wajib diisi, isi form sesuaikan dengan yang dibutuhkan

Komentar via web

Balas
Bangkoor
22-02-2016 10:25

Oh opencart tuh pake MVC gitu mas?

Komentar via web

Balas
Danni Moring
22-02-2016 10:51

ceritanya sih gitu mereka pake MVC

Komentar via web

Balas