Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


trubadan
 Поделиться

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

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

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

 

Вопрос 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 месяцев спустя...

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

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 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.