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

$this->session->data['shipping_method']


Recommended Posts

Всем добрый день. Есть сайт https://test.fish2o.ru/ в качестве модуля корзины стоит quickcheckout от ***** (ставили давно, много на нем завязано, заменять симплой уже не вариант). И появился следующий баг: в настройках прописана сумма заказа, при которой меняется стоимость доставки. Например для Московских адресов, это 3499 руб. Если набрать в корзину на, допустим 3200, а потом через кнопку "+" увеличить количество, не всегда срабатывает эта настройка. При том, что модель отдает верный резултат, далее он записывается в $this->session->data['shipping_methods'],  из него потом получается $this->session->data['shipping_method']  и уже в totals попадает $this->session->data['shipping_method'] ['cost']. Сам модуль состоить из нескольких контрллеров, как стандартный checkout. Пробовал выводить $this->session->data['shipping_method'] в каждом контроллере и вот что получаю: допустим в quickcheckout/shipping_method/index выдает правильное значение (по-сути, только что полученное из модели), далее идет запрос на quickcheckout/shipping_method/set, там тоже все верно, следующим же запросом идет quickcheckout/cart и там уже $this->session->data['shipping_method'] с другим значением. Я не могу уловить, где оно успело измениться. Какой-то логики в этом я не уследил. Через раз все срабатывает. Перерыл все контроллеры, где $this->session->data['shipping_method'] устанавливается, думал, может где-то под капотом ставится - ничего подобного. Если кто-нибудь сталкивался или понимает в чем может быть дело, прошу помочь

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


02.03.2022 в 18:02, Linkoln сказал:

quickcheckout от *******

Это пиратский ресурс, который продаёт и распространяет краденое ПО. Вот модуль от автора.

https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=7382

 

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

02.03.2022 в 18:21, mpn2005 сказал:

Это пиратский ресурс, который продаёт и распространяет краденое ПО. Вот модуль от автора.

https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=7382

 

Да, я в курсе, но так уже вышло, что модуль этот ставили давно, и не я, а мне сейчас нужно чинить

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


02.03.2022 в 19:22, Linkoln сказал:

Да, я в курсе, но так уже вышло, что модуль этот ставили давно, и не я, а мне сейчас нужно чинить

По приведённому описанию, вам заочно никто не поможет.

Надо просматривать и отлаживать код. Или писать автору, который в своём коде, естественно, разберётся быстрее всех.

Может это просто недоработка в установленной версии. В текущей версии это может быть уже и и справлено.

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

То есть, по-сути, у нас 2 ajax запроса, в первом после получения данных из модели устанавливается $this->session->data['shipping_methods'], Но в следующем запросе, значение уже другое. Как такое вообще может быть? Ну по-логике, оно где-то еще записывается, но я через grep -p все файлы прочесал, везде где нашел не имело никакого отношения. На скрине показан результат var_dump($this->session->data['shipping_method']['cost']); Цифрой указан порядок запроса

 

Снимок экрана 2022-03-02 в 18.21.01.png

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


02.03.2022 в 18:25, mpn2005 сказал:

По приведённому описанию, вам заочно никто не поможет.

Надо просматривать и отлаживать код. Или писать автору, который в своём коде, естественно, разберётся быстрее всех.

Может это просто недоработка в установленной версии. В текущей версии это может быть уже и и справлено.

Тогда может вы вкурсе, данные в сессию пишутся синхронно?

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


02.03.2022 в 19:26, Linkoln сказал:

То есть, по-сути, у нас 2 ajax запроса, в первом после получения данных из модели устанавливается $this->session->data['shipping_methods'], Но в следующем запросе, значение уже другое. Как такое вообще может быть? Ну по-логике, оно где-то еще записывается, но я через grep -p все файлы прочесал, везде где нашел не имело никакого отношения. На скрине показан результат var_dump($this->session->data['shipping_method']['cost']); Цифрой указан порядок запроса

Проблема простая.

1) Доставки зависят от товаров
2) Итоги зависят от доставки

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

И получается, что тут не достаточно двух запросов. Надо что-то в таком духе:

1) Сменили количество, перегрузили корзину (Вместе с итогами).

2) Перегрузили доставки (Посчиталась цена доставки)
3) Теперь надо перегрузить итоги, чтобы в них была нужная стоимость доставки. Можно ещё раз перегрузить содержимое корзины вместе с итогами.

Решение вроде простое, но повозится придётся. И запросы должны быть ещё не асинхронными, чтобы не возникали гонки.

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

02.03.2022 в 19:28, Linkoln сказал:

Тогда может вы вкурсе, данные в сессию пишутся синхронно?

А при чём тут пишется?

Пишется при  обработке потока. Как запрос пришёл, так и обработался.

По завершению обработки идёт сохранение данных сессии.

Если запросы асинхронные, то очерёдность будет непредсказуемой.

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

Народ, 2 дня убил, уже и на redis пробовал перевести, думал с сессиями что-то, ничего не вышло. Провел следующий эксперемент: в контроллере, который вызывается первым: extension/quickcheckout/set добавил установку в сессию случайного значения, назвал его rand

$rand =  rand(10,99);
$this->session->data['rand'] = $rand;
var_dump('rand = ' . $rand );

 

В контроллере, который вызывается следующим: extension/quickcheckout/cart добавил просто вывод этой переменной из сессии

var_dump('$this->session->data[\'rand\'] = ' . $this->session->data['rand'] );

При клике в корзине на кнопку "+"  происходит отправлка данных на extension/quickcheckout/set там в сессию записывается значение, следом грузится extension/quickcheckout/cart (Очередность проверял, выводил время в милисекундах - все четко, порядок именно такой). И вот что мы получаем, где-то 1-5 раз в обоих случаях выводится верное значение, потом несколько раз в extension/quickcheckout/cart показывает предыдущее. Логично было предположить, что в первом контроллере не устанавливается значение, для того, что бы это проверить, я быстро набросал модель castom/custom с одним методом, котрый возвращает текущее значение  $this->session->data['rand'].

public funtion getRand(){
    if(isset($this->session->data['rand'])){
            return $this->session->data['rand'];
        } else {
            return 0;
    }
}

Теперь в extension/quickcheckout/set (котроллер, который вызывается первым) стал проверять текущее значении сессии, полученное из этой модели

    	$this->session->data['rand'] =  rand(10,99);
		var_dump( $this->session->data['rand'] );    // 1

		$this->load->model('custom/custom');
		$fromCustom = $this->model_custom_custom->getRand();

		var_dump($fromCustom );  // 2

Значение в строке 1 и в строке 2 ВСЕГДА выводит одинаковое.
Но если продолжить добавлять товар в корзину, то происходит эта долбанная магия: 5 раз значение показывается одинаковое во всех трех выводах (48, 21, 55, 74, 59). Затем,  на 6-й раз в extension/quickcheckout/set в строке 1 и строке 2  показывает новое значение: 33, а в extension/quickcheckout/cart показывает предыдущее значение rand - 59 .  Проверяю базу, в базе лежит 59.
У меня совсем закончились мысли, что это может быть. Получается в одном месте значение ссессии устанавливается, в другом читается, а в третьем и в базе все еще предыдущее. Если у кого-нибудь есть мысли по этому поводу прошу поделиться

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


P.S. На самом деле количество "удачных" и "неудачных" записей всегда разное, 5-6 я написал для примера, в действительности эта цифра всегда разная. Никакой системы я в этом не нашел. Порядок запросов одинаковый

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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