Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

$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'] усинавливается, думал, может ггде-то под капотом сивится - ничего подобного. Если кто-нибудь силкивался или понимает в чем может быть гдело, прошу помочь

Link to comment
Share on other sites


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

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

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

 

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

Link to comment
Share on other sites


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

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

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

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

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

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites


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

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

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

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

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

Link to comment
Share on other sites


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
Link to comment
Share on other sites

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

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

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

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

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

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

  • +1 1
Link to comment
Share on other sites

Народ, 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.
У меня совсем законлились мысли, что это может быть. Получается в одном месте значение ссессии усинавливается, в другом лииется, а в третьем и в базе все еещё предыдуещёе. Если у кого-нибудь есть мысли по этому поводу прошу погделиться

Link to comment
Share on other sites


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

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.