V
V
Vlad Nesterenko2019-01-21 18:34:19
opencart
Vlad Nesterenko, 2019-01-21 18:34:19

How to add another price to Opencart cart?

I had to display 2 prices for the product, when you click on the "Add product" button, an ajax request is executed, the data that is passed to the request (product_id, quantity, options, .) The function that processes the request:

public function add() {
    $this->load->language('checkout/cart');
    $json = array();
    if (isset($this->request->post['product_id'])) {
      $product_id = (int)$this->request->post['product_id'];
    } else {
      $product_id = 0;
    }

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

    $product_info = $this->model_catalog_product->getProduct($product_id);

    if ($product_info) {
      if (isset($this->request->post['quantity'])) {
        $quantity = (int)$this->request->post['quantity'];
      } else {
        $quantity = $product_info['minimum'] ? $product_info['minimum'] : 1;
      }

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

      $product_options = $this->model_catalog_product->getProductOptions($this->request->post['product_id']);

      foreach ($product_options as $product_option) {
        if ($product_option['required'] && empty($option[$product_option['product_option_id']])) {
          $json['error']['option'][$product_option['product_option_id']] = sprintf($this->language->get('error_required'), $product_option['name']);
        }
      }

      if (isset($this->request->post['recurring_id'])) {
        $recurring_id = $this->request->post['recurring_id'];
      } else {
        $recurring_id = 0;
      }

      $recurrings = $this->model_catalog_product->getProfiles($product_info['product_id']);

      if ($recurrings) {
        $recurring_ids = array();

        foreach ($recurrings as $recurring) {
          $recurring_ids[] = $recurring['recurring_id'];
        }

        if (!in_array($recurring_id, $recurring_ids)) {
          $json['error']['recurring'] = $this->language->get('error_recurring_required');
        }
      }

      if (!$json) {
        $this->cart->add($this->request->post['product_id'], $quantity, $option, $recurring_id);

        $json['success'] = sprintf($this->language->get('text_success'), $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']), $product_info['name'], $this->url->link('checkout/cart'));

        unset($this->session->data['shipping_method']);
        unset($this->session->data['shipping_methods']);
        unset($this->session->data['payment_method']);
        unset($this->session->data['payment_methods']);

        // Totals
        $this->load->model('extension/extension');

        $total_data = array();
        $total = 0;
        $taxes = $this->cart->getTaxes();

        // Display prices
        if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
          $sort_order = array();

          $results = $this->model_extension_extension->getExtensions('total');

          foreach ($results as $key => $value) {
            $sort_order[$key] = $this->config->get($value['code'] . '_sort_order');
          }

          array_multisort($sort_order, SORT_ASC, $results);

          foreach ($results as $result) {
            if ($this->config->get($result['code'] . '_status')) {
              $this->load->model('total/' . $result['code']);

              $this->{'model_total_' . $result['code']}->getTotal($total_data, $total, $taxes);
            }
          }

          $sort_order = array();

          foreach ($total_data as $key => $value) {
            $sort_order[$key] = $value['sort_order'];
          }

          array_multisort($sort_order, SORT_ASC, $total_data);
        }

        $json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total));
      } else {
        $json['redirect'] = str_replace('&', '&', $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']));
      }
    }
    $this->response->addHeader('Content-Type: application/json');
    $this->response->setOutput(json_encode($json));
  }

How can I not find in this function where the price is being processed? can someone come across?

Answer the question

In order to leave comments, you need to log in

3 answer(s)
Z
zoozag, 2019-01-21
@Vlad852

Processing is already in the cart itself:
$this->cart->add($this->request->post['product_id'], $quantity, $option, $recurring_id);
System/library/cart.php is responsible for this
What is displayed in cart.tpl is taken respectively from the cart controller catalog/controller/checkout/cart.php

M
morricone85, 2019-01-21
@morricone85

where is the price processing

What do you mean by price processing?

W
web-mechanic, 2019-02-01
@amfetamine

In order for all this to work normally, it is necessary to make it possible to enter several prices at the system level, and not solve the issue with crutches

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question