Jump to content

getSubTotal передает количество, а не стоимость


Sam
 Share

Go to solution Solved by Tesloz,

Recommended Posts

ocStore 2.3, корзина Simple.

Хотел вывести сообщение в корзине "До бесплатной доставки осталось купить на: _____ рублей." Подскажите, где я ошибаюсь.

В контроллере simplecheckout_cart.php прописываю в public function index

$cart_total = $this->cart->getSubTotal(); 
$data['cart_total'] = $cart_total;  

 

Соответственно в шаблоне корзины simplecheckout_cart.tpl 

<?php if ($cart_total < 4000): ?>
    <div style="color: #cc0000; font-size: 16px; font-weight: bold; margin-top: 10px; padding: 10px; border: 1px solid #cc0000; background-color: #f8d7da; border-radius: 5px; text-align: right;">
        До бесплатной доставки осталось купить на: <strong><?php echo number_format(4000 - $cart_total, 2, '.', ' '); ?> рублей</strong>
    </div>
<?php endif; ?>

 

В итоге, у меня считается 4000 минус количество товара в корзине. А должно быть 4000 минус предварительная стоимость. Пробовал через getTotal, то же самое.

 

Link to comment
Share on other sites

  • Solution

Таки там надо присваивать в (если не ошибаюсь)

$this->_templateData

ну и название "cart_total" смени т.к. оно уже используется 

Спойлер
            if (strpos($text_items, '{quantity}') !== false || strpos($text_items, '{total}') !== false) {
                $find = array(
                    '{quantity}', 
                    '{total}'
                );

                $replace = array(
                    '{quantity}' => $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), 
                    '{total}' => $this->simplecheckout->formatCurrency($total)
                );

                $this->_templateData['cart_total'] = str_replace($find, $replace, $text_items);
            } else {
                $this->_templateData['cart_total'] = sprintf($text_items, $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->simplecheckout->formatCurrency($total));
            } 

 

 

Link to comment
Share on other sites

В 12.11.2024 в 17:47, AlexDW сказал:

проверьте что у вас с $data['cart_total']

пробуйте другое название переменной, возможно перезаписывается

 

Попробовал изменить название, сейчас расчет вообще перестал работать. Добавил в код контроллера логирование:

$total_cart_value = $this->cart->getSubTotal();
$this->_templateData['total_cart_value'] = $total_cart_value;

$this->log->write('Data passed to template: ' . json_encode($this->_templateData));
$this->response->setOutput($this->load->view('checkout/simplecheckout_cart', $this->_templateData));

 

В логах значение subtotal передается верно:

Calculated Total Cart Value (SubTotal): 1190
Data passed to template: {"total_cart_value":1190}

Но ругается на переменные в шаблоне, хотя контроллером они передаются:

Спойлер

PHP Notice:  Undefined variable: hide in 
PHP Notice:  Undefined variable: has_error in 
PHP Notice:  Undefined variable: display_header in 
PHP Notice:  Undefined variable: attention in 
PHP Notice:  Undefined variable: error_warning in 
PHP Notice:  Undefined variable: column_image in 
PHP Notice:  Undefined variable: column_name in 
PHP Notice:  Undefined variable: column_model in 
PHP Notice:  Undefined variable: column_quantity in 
PHP Notice:  Undefined variable: column_price in 
PHP Notice:  Undefined variable: column_total in 
PHP Notice:  Undefined variable: products in 
PHP Warning:  Invalid argument supplied for foreach() in 
PHP Notice:  Undefined variable: vouchers in 
PHP Warning:  Invalid argument supplied for foreach() in 
PHP Notice:  Undefined variable: totals in 
PHP Warning:  Invalid argument supplied for foreach() in 
PHP Notice:  Undefined variable: cart_total in 
PHP Notice:  Undefined variable: display_weight in 
PHP Notice:  Undefined variable: display_model in 

 

Я не программист, захотелось попробовать что-то простое сделать) Третий день победить не получается. Пока скриптом сделал, работает. Но хотелось бы без скрипта. 

При этом оформление заказа же работает, курьерские службы, способы оплаты. Там тоже завязка от суммы корзины на бесплатную доставку работает, значит переменные передаются. А лог говорит, что нет.

Link to comment
Share on other sites

В 13.11.2024 в 08:58, Tesloz сказал:

Таки там надо присваивать в (если не ошибаюсь)

$this->_templateData

ну и название "cart_total" смени т.к. оно уже используется 

  Показать контент
            if (strpos($text_items, '{quantity}') !== false || strpos($text_items, '{total}') !== false) {
                $find = array(
                    '{quantity}', 
                    '{total}'
                );

                $replace = array(
                    '{quantity}' => $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), 
                    '{total}' => $this->simplecheckout->formatCurrency($total)
                );

                $this->_templateData['cart_total'] = str_replace($find, $replace, $text_items);
            } else {
                $this->_templateData['cart_total'] = sprintf($text_items, $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->simplecheckout->formatCurrency($total));
            } 

 

 

 

Спасибо! Помогло. 

Если кому-то пригодится, то вот решение для вывода сообщения, до бесплатной доставки осталось купить на:

simplecheckout_cart.php

$cart_total = $this->cart->getSubTotal();
$this->_templateData['total_cart_value'] = $cart_total;

 

simplecheckout_cart.tpl 

<?php if (isset($total_cart_value) && (float)$total_cart_value < 4000): ?>
    <div style="color: #009CAA; font-size: 16px; font-weight: bold; margin-top: 10px; padding: 10px; border: 1px solid #009CAA; background-color: #DDF1F4; border-radius: 5px; text-align: right;">
        До бесплатной доставки осталось купить на: <strong><?php echo number_format(4000 - (float)$total_cart_value, 2, '.', ' '); ?> рублей</strong>
    </div>
<?php endif; ?>   

 

Link to comment
Share on other sites

  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...