Как Shopkeeper сохраняет корзину?
На досуге решил заняться самообучением и покопаться в известных дополнений и посмотреть как они работают.
Настроил шопкипер, полез в исходники, и что то совсем не могу понять куда он сохраняет корзину пользователя (набранные товары до момента отправки заказа).
В кукисы и localstorage вроде не кладётся ID товара что в корзине, или я не нашёл.
На сервак идёт запрос к connector_fe.php с параметрами действия, ИД-товара, количества и какой то системный psn.
Дальше конструктор создаёт экземпляр шопкипера с параметром что был запрос и нужно его обработать.
Дальше вызов savePurchaseData
А вот дальше я теряюсь,
там заложены вызовы плагинов OnSHKaddProduct и OnSHKAfterAddProduct которые пользователь может определить (очень толково и гибко как по мне).
а куда реально сохраняется список товаров в корзине я понять не могу.
Инстинктивно чувствую что в переменную сессии, и там есть код
в общем если кто то просветит буду признателен.
Настроил шопкипер, полез в исходники, и что то совсем не могу понять куда он сохраняет корзину пользователя (набранные товары до момента отправки заказа).
В кукисы и 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, но как они потом в сессию перекочёвывают как то совсем не явно.в общем если кто то просветит буду признателен.
Комментарии: 8
Кажется, вот здесь:
Амперсанд (&) обозначает связь переменных. И если мы меняем $this->data — значит мы меняем $_SESSION['shk_order']
$this->data = &$_SESSION['shk_order'];
Амперсанд (&) обозначает связь переменных. И если мы меняем $this->data — значит мы меняем $_SESSION['shk_order']
Понял, спасибо!
Амперсанд (&) обозначает связь переменных.Ну я бы поспорил на счет такого определения… Скорее он обозначает передачу адреса в памяти, где хранится содержимое указанное переменной… Но это тоже ОЧЕНЬ хреновое определение.
P.S. то, что это называется Амперсанд, все время забываю :-) Суть знаю, а термин сам никак не запомнить. Старость не в радость.
Аналог указателей как в С.
просто очень не явная передача. поэтому и запутался.
просто очень не явная передача. поэтому и запутался.
просто очень не явная передача.У меня в свое время из этой серии были похожие проблемы со штуками вроде:
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.
?>
Хотя на самом деле странно, что было использовано обозначение shk_order, а не shk_cart, т.к. мне почему-то кажется, что в order должно храниться информация определяющая сам заказ, к примеру вид заказа (повторяющийся, единичный) ID сессии, ID структуры данных, где хранится адрес и т.д.
Кстати автору вопроса посоветовал бы в целях самообучения заняться изучением кода других дополнений. В ShopKeeper3 с документацией раньше все было очень плохо и я не думаю, что что-то изменилось… Поэтому будет сложно в нем копаться. Почему именно такой код используется и какой функционал он предоставляет банально не откуда взять :-) Получается, что читая код ты будешь и понимать, что он делает вообще :-)
Вообще мой совет лезть в Github и смотреть банальные исправления ошибок, т.к. там есть комментарии и т.п.
Вообще мой совет лезть в Github и смотреть банальные исправления ошибок, т.к. там есть комментарии и т.п.
Просто я понимаю как работает шопкипер со стороны фронтенда, и можно оценить что и где должно быть под капотом. А копаться в незнакомом модуле хоть и с комментариями в коде не думаю что будет полезно.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.