Время жизни корзины netcat
Так уж повелось, что корзина в netcat хранится в $_SESSION, отсюда время её жизни порядка 30 минут, после бездействия она удаляется.
Самое просто решение, это дублировать корзину в cookie.
namespace Akh\Shop\Cart;
use nc_Core;
class Cookie
{
public function __construct()
{
global $catalogue;
// сессия корзины создаётся позже, так что при её отсутствии создадим её для текущего сайта
if (!isset($_SESSION['nc_netshop_' . $catalogue . '_cart'])) {
$_SESSION['nc_netshop_' . $catalogue . '_cart'] = null;
}
foreach ($_SESSION as $sessName => $sessValue) {
if (strpos($sessName, 'nc_netshop_') === 0) {
if (is_array($sessValue)) {
// занесение данных в куку
$this->setCookie($sessName, $sessValue);
} else {
// восстановление данных из куки
$this->restoreCart($sessName);
}
}
}
}
/**
* Восстановление корзины из куки
* @param $name
*/
protected function restoreCart($name)
{
$cart = json_decode($_COOKIE[$name], true);
if (is_array($cart)) {
$_SESSION[$name] = $cart;
}
}
/**
* Занесение корзину в куку
* @param $name
* @param $value
*/
protected function setCookie($name, $value)
{
if (!is_array($value)) {
$value = [];
}
$value = json_encode($value);
nc_Core::get_object()->cookie->set($name, $value, time() + (3600 * 24 * 365 * 5), true);
}
}
Достаточно создать класс в /netcat/modules/default/function.inc.php и корзина будет дублироваться в cookie и восстанавливаться при пропаже
new Akh\Shop\Cart\Cookie();