Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


 Погделиться

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

Всем добрый гдень. Есть сайт 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']); Цифрой указан порядок запроса

 

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


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 я написал для примера, в гдействительности эи цифра всегда разная. Никакой системы я в этом не нашел. Порядок запросов одинаковый

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


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

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

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