Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara mengubah harga asli di halaman produk OpenCart?

Oke, untuk mengarahkan Anda ke arah yang benar, inilah cara saya melakukan ini:

1. render masukan tersembunyi
Seperti yang Anda ketahui, dalam catalog/view/theme/default/template/product/product.php ada permintaan AJAX untuk menambahkan produk ke keranjang:

$('#button-cart').bind('click', function() {
    $.ajax({
        url: 'index.php?route=checkout/cart/add',
        type: 'post',
        data: $('.product-info input[type=\'text\'], .product-info input[type=\'hidden\'], .product-info input[type=\'radio\']:checked, .product-info input[type=\'checkbox\']:checked, .product-info select, .product-info textarea'),
        dataType: 'json',
                // ...
        });
});

Jika Anda melihat pada data parameter Anda akan melihat bahwa semua input, pemilihan, area teks, dll. ada dalam .product-info div diisi dan diposting ke PHP.

Oleh karena itu saya akan merender input tersembunyi dengan nilai harga khusus ke dalam .product-info itu div agar tidak perlu mengubah permintaan AJAX sama sekali. Katakanlah nama input itu adalah custom_price .

2. checkout/cart/add
Buka catalog/controller/checkout/cart.php dan cari add metode. Di sini semua keajaiban harus dilakukan. Setelah bagian kode ini:

            if (isset($this->request->post['option'])) {
                $option = array_filter($this->request->post['option']);
            } else {
                $option = array();  
            }

Saya akan menambahkan ini:

            if(isset($this->request->post['custom_price']) && $this->isCustomPriceValid($this->request->post['custom_price'])) {
                $custom_price = $this->request->post['custom_price'];
            } else {
                $custom_price = false;
            }

Terapkan isCustomPriceValid() metode untuk memenuhi kebutuhan Anda...dan lanjutkan ke pengeditan terakhir di sini - ubah baris ini:

$this->cart->add($this->request->post['product_id'], $quantity, $option);

ke:

$this->cart->add($this->request->post['product_id'], $quantity, $option, $custom_price);

3. Kereta
Sekarang buka file ini:system/library/cart.php dan cari lagi add metode. Anda harus mengubah definisi metode menjadi yang ini:

public function add($product_id, $qty = 1, $option = array(), $custom_price = false) {

Sebelum baris kode terakhir dalam metode ini, tambahkan satu lagi:
(kode ini diedit karena komentar dari OP)

    // ...

    if($custom_price) {
        if(!isset($this->session->data['cart']['custom_price'])) {
            $this->session->data['cart']['custom_price'] = array();
        }

        $this->session->data['cart']['custom_price'][$key] = $custom_price;
    }

    $this->data = array(); // <- last line
}

Pengeditan terakhir harus dalam metode getProducts() karena yang satu ini memuat semua data dari DB dan meneruskannya ke pengontrol lain untuk tujuan tampilan.

Sekarang saya tidak tahu apakah harga khusus Anda harus menimpa harga + harga opsi atau hanya harga, sehingga harga opsi akan ditambahkan ke dalamnya, jadi saya akan tetap menggunakan pilihan kedua karena lebih deskriptif dan pilihan pertama bisa dengan mudah diturunkan dari contoh saya.

Cari baris

$price = $product_query->row['price'];

dan tepat setelah menambahkan

if(isset($this->session->data['cart']['custom_price'][$key])) {
    $price = $this->session->data['cart']['custom_price'][$key];
}

Sekarang harganya harus ditimpa dengan yang custom. Periksa lebih lanjut bahwa harga produk kemudian ditetapkan sebagai:

$this->data[$key] = array(
    // ...
    'price'           => ($price + $option_price),
    // ...              
);

Jadi jika Anda ingin menimpa seluruh harga dengan harga khusus, tambahkan kondisi itu tepat setelah larik seperti ini (bukan setelah $price = ...; ):

if(isset($this->session->data['cart']['custom_price'][$key])) {
    $this->data[$key]['price'] = $this->session->data['cart']['custom_price'][$key];
}

Ini harusnya. Saya tidak menguji kodenya, Ini mungkin berfungsi atau tidak dengan sedikit modifikasi. Saya bekerja dengan OC 1.5.5.1. Ini seharusnya hanya mengarahkan Anda ke arah yang benar (sambil percaya bahwa finishnya tidak terlalu jauh).

Selamat menikmati!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jumlah kolom mysql.proc salah. Diharapkan 20, ditemukan 16. Tabel mungkin rusak

  2. XAMPP TIDAK BEKERJA! - OS X Yosemite

  3. Replikasi dari MySQL ke MS SQL

  4. Hasilkan data untuk rentang tanggal termasuk yang tidak ada dalam data

  5. Pergi dari database ke sesi