J'utilise le code suivant dans mon contrôleur pour ajouter des éléments de produit à la session:
$app = JFactory::getApplication();
$input = $app->input;
$itemid = $input->get('itemid');
$quan = $input->get('quan');
$session = JFactory::getSession();
$cart = $session->get('cart', array());
$cart['items'][] = array('itemid' => $itemid, 'quan' => $quan);
$session->set('cart', $cart);
Cela fonctionne, mais si j'ajoute le même produit avec le même ID à la session une fois de plus, il ne met pas à jour la quantité d'un tel produit mais ajoute le même produit en tant que nouvel élément. J'ai donc besoin de quelque chose comme:
if($itemid == 'itemid') {
$cart['items'][] = array('quan' => 'quan'+$quan); // i.e. current quan + new quan
} else {
$cart['items'][] = array('itemid' => $itemid, 'quan' => $quan);
}
Ça ne marche pas bien sur
Vous avez seulement votre itemid et la quantité correspondante dans votre tableau. Pourquoi n'utilisez-vous pas l'id itemid en tant qu'index de tableau ($ cart ['items'] [<ITEMID>]) afin de pouvoir facilement mettre à jour votre quantité si l'index existe déjà.
$cart['items'][100] = 10
$cart['items'][236] = 5
your itemid --^ ^-- your quantity
Quelque chose comme
if (isset($cart['items'][$itemid]))
{
$cart['items'][$itemid] = $cart['items'][$itemid] + $quan;
}
else
{
$cart['items'][$itemid] = $quan;
}
Sinon, vous devez parcourir votre tableau, trouver l'élément avec le bon itemid et mettre à jour sa quantité, comme ceci:
$app = JFactory::getApplication();
$input = $app->input;
$itemid = $input->get('itemid');
$quan = $input->get('quan');
$session = JFactory::getSession();
$cart = $session->get('cart', array());
$found = false;
if (isset($cart['items']) && !empty($cart['items']))
{
foreach ($cart['items'] as &$item)
{
if ($item['itemid'] == $itemid)
{
$item['quan'] += $quan;
$found = true;
break;
}
}
}
if (!$found)
{
$cart['items'][] = array('itemid' => $itemid, 'quan' => $quan);
}
$session->set('cart', $cart);