Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Вопросы по корзине.


trubadan

Recommended Posts

Всем доброго времени суток. 

Парочка вопросов по работе с корзиной.

 

Вопрос 1.

 

При входе на сайт, состояние корзины (если она пустая) выглядит так:

cart_01.jpg

Если добавить в корзину товар, а потом, удалить из нее все товары, то она принимает следующий вид: 

cart_02.jpg

 

Собственно вопрос - как сделать так, чтобы вместо нулей, она показывала надпись "в корзине пусто"? Эта надпись появляется только при обновлении страницы.

 

Вопрос 2.

 

Если зайти в корзину и удалить товар,

cart_03.jpg

то визуально он в корзине остается. То, что товар удаляется, видно только по состоянию корзины или если обновить страницу. 

 

Вопрос - как это исправить?

Надіслати
Поділитися на інших сайтах


catalog\controller\common\cart.php

после строки:

$data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total));

вставить:

if ($total===0) {$data['text_items'] = 'В корзине пусто';}

или

if ($total===0) {$data['text_items'] = $data['text_empty'];}

про 2 возможно id="cart" не написано в cart.tpl

Змінено користувачем specussa
Надіслати
Поділитися на інших сайтах


catalog\controller\common\cart.php

после строки:

$data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total));

вставить:

if ($total===0) {$data['text_items'] = 'В корзине пусто';}

или

if ($total===0) {$data['text_items'] = $data['text_empty'];}

 

Чет не срабатывает ;(

Надіслати
Поділитися на інших сайтах


В коробочном варианте ОС всегда в пустой корзине ноли показываются. У вас тема или модуль отображают надпись, какие и как- неизвестно.

Можно попробовать аналогично $data['text_items']

в файле \catalog\controller\checkout\cart.php   после

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

добавить 

if ($total===0) {$json['total'] = $this->language->get('text_empty');}

$json['total'] там два раза встречается.

Змінено користувачем Shureg
Надіслати
Поділитися на інших сайтах


  • 9 months later...

Спасибо за подсказки. Первый вариант прошел нормально.

if ($total===0) {$data['text_items'] = 'В корзине пусто';}

 Может кто подскажет - мне нужно сделать надписи на корзине например так:

0 товаров - Останусь голодным (это я реализовал)

1 товар - Немного подкреплюсь (пробовал через языковый файл но появляется только после обновления страницы)

более 2х товаров - Наемся (вообще не понимаю как)

Заранее спасибо за помощь.

 

Надіслати
Поділитися на інших сайтах


Цитата

 

Блин, парни, откуда такая любовь удалять гланды через задний проход?

Чуть теории.

Манипуляции с содержимым виджета корзины происходят с помощью функций add и remove контроллера catalog/controller/checkout/cart.php.
Если "не сложилось", например попытались добавить товар без обязательной опции, в ответе будет json['redirect'] на страницу товара.
Если все хорошо, в ответе json будет поле total, которое скрипт на странице подхватывает и вставляет как текст в виджет корзины.
 

$json['total'] = ....

это оно.

По умолчанию, "из коробки" вывод формируется в виде "{количество} товаров - {сумма}", независимо от количества товаров и суммы, даже нулевого.
Если хочется, чтобы в зависимости от количества выводились разные надписи, то вместо коробочного единого текста делаете if или switch по

$this->cart->countProducts()

(это функция подсчета числа товаров в корзине) и там уже по вариантам количества ( ноль, не ноль, другие цифры) делаете свой вывод.
В итоге вместо дефолтного присваивания у вас будет конструкция вида:
Если А $json['total'] = ...
Если B $json['total'] = ....
и т.д.

Можно добавить в языковый файл корзины разных текстов и их использовать для таких случаев.

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

  • +1 1
Надіслати
Поділитися на інших сайтах

Спасибо. А можно пример строки привести, чего то у меня не получается(( Я так понял что после

Цитата

$data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total));

Нужно добавить 

Цитата

if ($json['total'] = 0) {$data['text_items'] = ' Останусь голодным ';}

if ($json['total'] = 1) {$data['text_items'] = ' Немного подкреплюсь ';}

Понимаю, что что-то не так. Я не силен в функциях

Заранее спасибо

Змінено користувачем vadim
Надіслати
Поділитися на інших сайтах


Правильно поняли, что "что-то не так" $json['total'] - это не число товаров в корзине, а уже отформатированная строка ответа " Икс товаров на Игрек тугриков". Число товаров в корзине - это $this->cart->countProducts(), код который вам нужен должен выглядеть где-то так. if($this->cart->countProducts() == 0) $json['total'] = ... if($this->cart->countProducts() == 1) $json['total'] = ... Обратите внимание, сравнение в php не =  (как у вас в коде - это присвоить значение), а == $data['text_items'] - это, тащем-та, тот самый шаблон, вида "%s товаров - %s денег". Он вообще не для правки в коде :) На вашем месте я бы вообще определил в языковом файле language/(язык)/checkout/cart.php несколько текстов для разных вариантов: $_['text_items1'] = "%s товаров - %s денежных единиц. Немного подкреплюсь" и использовал бы их. Например:if($this->cart->countProducts() == 1) $json['total'] = sprintf($this->language->get('text_items1'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); Что делает этот код: если число товаров в корзине равно единице, то в заполняет места в шаблоне (первый аргумент функции sprintf, до первой запятой) для подстановки ( %s ) параметрами. Первый - от первой до второй запятой в функции sprintf (второй аргумент) считает число товаров и купонов, второй - после второй запятой (третий аргумент), сумма. Если не нужен вывод числа товаров, суммы - правите шаблоны и убираете из sprintf ненужные параметры.

Змінено користувачем Engineer
  • +1 1
Надіслати
Поділитися на інших сайтах

Новый форум - это нечто. Полностью сожрало разметку. Попробую повторить. Правильно поняли, что "что-то не так" $json['total'] - это не число товаров в корзине, а уже отформатированная строка ответа " Икс товаров на Игрек тугриков". Число товаров в корзине - это $this->cart->countProducts(), код который вам нужен должен выглядеть где-то так Например: if($this->cart->countProducts() == 0) $json['total'] = ... if($this->cart->countProducts() == 1) $json['total'] = ... Обратите внимание, сравнение в php не =  (как у вас в коде - это присвоить значение), а == $data['text_items'] - это, тащем-та, тот самый шаблон, вида "%s товаров - %s денег". Он вообще не для правки в коде :) На вашем месте я бы вообще определил в языковом файле language/(язык)/checkout/cart.php несколько текстов для разных вариантов вида: $_['text_items1'] = "%s товаров - %s денежных единиц. Немного подкреплюсь" и использовал бы их.if($this->cart->countProducts() == 1) $json['total'] = sprintf($this->language->get('text_items1'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); Что делает код: если число товаров в корзине равно единице, то в заполняет места в шаблоне (первый аргумент функции sprintf, до первой запятой) для подстановки ( %s ) параметрами. Первый - от первой до второй запятой в функции sprintf (второй аргумент) считает число товаров и купонов, второй - после второй запятой (третий аргумент), сумма. Если не нужен вывод числа товаров, суммы - правите шаблоны и убираете из sprintf ненужные параметры.

Надіслати
Поділитися на інших сайтах

Поделюсь решением для своего текста в корзине, может кому пригодится. Огромное спасибо Engineer за решение и подсказки.

Править нужно 4 файла

catalog|controller/common/cart.php

catalog/controller/checkout/cart.php

catalog/language/russian/checkout/cart.php

catalog/language/russian/common/cart.php

добавляем в оба языковых файла catalog/language/russian/checkout/cart.php и catalog/language/russian/common/cart.php например текст, который нам нужно у видеть в корзине:

Цитата

$_['text_items_1']   = ' Немного подкреплюсь <br> В Вашей корзине <br> (%s)товаров на - %s';
$_['text_items_2']   = ' Наемся от пуза =) <br> В Вашей корзине <br> (%s)товаров на - %s';

$_['text_empty']      = 'В корзине пусто <br> Останусь голодным =(';

в файл catalog|/controller/common/cart.php

Цитата

после $data['text_empty'] = $this->language->get('text_empty');

добавляем

$data['text_items_1'] = $this->language->get('text_items_1');

$data['text_items_2'] = $this->language->get('text_items_2');

а после 

$data['text_items'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total));

добавляем

if ($this->cart->countProducts() == 0) { $data['text_items'] = sprintf($this->language->get('text_empty'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total));}
        if ($this->cart->countProducts() == 1) { $data['text_items'] = sprintf($this->language->get('text_items_1'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); }

        if ($this->cart->countProducts() >1) { $data['text_items'] = sprintf($this->language->get('text_items_2'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); }

в файле catalog/controller/checkout/cart.php

Цитата

после

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

добавляем

if ($this->cart->countProducts() == 0) { $json['total'] = sprintf($this->language->get('text_empty'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total));}

if ($this->cart->countProducts() == 1) { $json['total'] = sprintf($this->language->get('text_items_1'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total));}
        if ($this->cart->countProducts() > 1) { $json['total'] = sprintf($this->language->get('text_items_2'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total)); }

Как то так  у меня все получилось

Змінено користувачем vadim
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.