Roman Shamin Roman Shamin - 5 years ago 440
Javascript Question

Opencart successful order ID and Total from JavaScript

I need to run JavaScript on the successful order's page and get two things: order ID and total order amount. The code looks like:

<script type="text/javascript">
// Some code here
arr.push([
"create_order",
{order_id: "*order_id*", sum: *sum*}
]);
</script>


Questions


  1. Where should I paste my script? If into success.tpl than where exactly? If into header.tpl than how to run it only on the page of successful order?

  2. Which variables I should to use? I have tried this, it did not work:



{order_id: "<?php echo $order_id; ?>", sum: <?php echo $product_total; ?>}


P. S. Opencart version is 1.5.6

Answer Source

The problem here is that on success page all the order data is already unset (deleted) from session variables. That's why your code cannot succeed.

Look into catalog/controller/checkout/success.php and change the beginning of the index() function to this:

public function index() {
    $this->data['order_id'] = 0; // <-- NEW LINE
    $this->data['total'] = 0; // <-- NEW LINE

    if (isset($this->session->data['order_id'])) {
        $this->data['order_id'] = $this->session->data['order_id']; // <-- NEW LINE
        $this->data['total'] = $this->cart->getTotal(); // <-- NEW LINE

        $this->cart->clear();

        unset($this->session->data['shipping_method']);
        unset($this->session->data['shipping_methods']);
        unset($this->session->data['payment_method']);
        unset($this->session->data['payment_methods']);
        unset($this->session->data['guest']);
        unset($this->session->data['comment']);
        unset($this->session->data['order_id']);    
        unset($this->session->data['coupon']);
        unset($this->session->data['reward']);
        unset($this->session->data['voucher']);
        unset($this->session->data['vouchers']);
    }   

    $this->language->load('checkout/success');

Now you have the order_id and cart's total values stored in template variables, so just use them in your success.tpl (not header):

<?php if($order_id) { ?>
<script type="text/javascript">
    // Some code here
    arr.push([
        "create_order",
        {order_id: '<?php echo $order_id; ?>', sum: '<?php echo $total; ?>'}
    ]);
</script>
<?php } ?>

This should be enough.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download