Как Shopkeeper сохраняет корзину?

На досуге решил заняться самообучением и покопаться в известных дополнений и посмотреть как они работают.
Настроил шопкипер, полез в исходники, и что то совсем не могу понять куда он сохраняет корзину пользователя (набранные товары до момента отправки заказа).

В кукисы и localstorage вроде не кладётся ID товара что в корзине, или я не нашёл.

На сервак идёт запрос к connector_fe.php с параметрами действия, ИД-товара, количества и какой то системный psn.
Дальше конструктор создаёт экземпляр шопкипера с параметром что был запрос и нужно его обработать.
Дальше вызов savePurchaseData
А вот дальше я теряюсь,
там заложены вызовы плагинов OnSHKaddProduct и OnSHKAfterAddProduct которые пользователь может определить (очень толково и гибко как по мне).
а куда реально сохраняется список товаров в корзине я понять не могу.

Инстинктивно чувствую что в переменную сессии, и там есть код

intersect = $this->checkIntersect( $product );
        
f( $intersect === false ){
            array_push( $this->data, $product );
}else{
            $this->data[ $intersect ]['count'] += $product['count'];
}
тоесть продукты пошли в переменную data, но как они потом в сессию перекочёвывают как то совсем не явно.

в общем если кто то просветит буду признателен.
lion
09 августа 2017, 11:50
modx.pro
2 345
0

Комментарии: 8

Илья Уткин
09 августа 2017, 18:46
+1
Кажется, вот здесь:
$this->data = &$_SESSION['shk_order'];

Амперсанд (&) обозначает связь переменных. И если мы меняем $this->data — значит мы меняем $_SESSION['shk_order']
    lion
    10 августа 2017, 14:57
    0
    Понял, спасибо!
      Волков Николай
      10 августа 2017, 15:21
      0
      Амперсанд (&) обозначает связь переменных.
      Ну я бы поспорил на счет такого определения… Скорее он обозначает передачу адреса в памяти, где хранится содержимое указанное переменной… Но это тоже ОЧЕНЬ хреновое определение.

      P.S. то, что это называется Амперсанд, все время забываю :-) Суть знаю, а термин сам никак не запомнить. Старость не в радость.
        lion
        10 августа 2017, 15:38
        0
        Аналог указателей как в С.
        просто очень не явная передача. поэтому и запутался.
          Волков Николай
          10 августа 2017, 15:53
          0
          просто очень не явная передача.
          У меня в свое время из этой серии были похожие проблемы со штуками вроде:

          public function &getValue()
          {
          ...
          }
          Тут про это можно почитать:

          php.net/manual/ru/language.references.return.php

          P.S. Убила заметка от кого-то:

          php.net/manual/ru/language.references.return.php#115745

          <?php

          function & func_b ()
          {
          $some_var = 2;
          return $some_var;
          }

          function func_a (& $param)
          {
          # $param is 1 here

          $param = & func_b();

          # Here the reference is changed and
          # the "&" in «func_a (& $param)»
          # is no longer in effect at all.
          # $param is 2 here

          $param++;

          # Has no effect on $var.
          }

          $var = 1;

          func_a($var);

          # $var is still 1 here!!! Because the reference was changed.

          ?>
        Волков Николай
        10 августа 2017, 15:35
        0
        Хотя на самом деле странно, что было использовано обозначение shk_order, а не shk_cart, т.к. мне почему-то кажется, что в order должно храниться информация определяющая сам заказ, к примеру вид заказа (повторяющийся, единичный) ID сессии, ID структуры данных, где хранится адрес и т.д.
        Волков Николай
        10 августа 2017, 15:27
        0
        Кстати автору вопроса посоветовал бы в целях самообучения заняться изучением кода других дополнений. В ShopKeeper3 с документацией раньше все было очень плохо и я не думаю, что что-то изменилось… Поэтому будет сложно в нем копаться. Почему именно такой код используется и какой функционал он предоставляет банально не откуда взять :-) Получается, что читая код ты будешь и понимать, что он делает вообще :-)

        Вообще мой совет лезть в Github и смотреть банальные исправления ошибок, т.к. там есть комментарии и т.п.
          lion
          10 августа 2017, 15:43
          0
          Просто я понимаю как работает шопкипер со стороны фронтенда, и можно оценить что и где должно быть под капотом. А копаться в незнакомом модуле хоть и с комментариями в коде не думаю что будет полезно.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          8