Перейти к содержанию

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


Перейти к решению Решений Tesloz,

Рекомендуемые сообщения

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, то же самое.

 

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

  • Решение

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

$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));
            } 

 

 

Ссылка на комментарий
Поделиться на другие сайты

В 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 

 

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

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

Ссылка на комментарий
Поделиться на другие сайты

В 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; ?>   

 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...