web-dev-qa-db-fra.com

Les données de session personnalisées Joomla sont écrasées

J'écris un panier de composants personnalisé et j'utilise une publication de formulaire pour enregistrer les données du panier dans la session Joomla.

Cela fonctionne initialement, mais si l'utilisateur ajoute ensuite un autre élément, l'élément d'origine est écrasé. Le formulaire lui-même est simplement publié de la vue des produits à la vue du panier. Je vais donc simplement vous montrer comment il est récupéré et enregistré en session:

$cart = array();
$cart['items'][] = array(
        'action' => $app->input->get('action', 'add', 'STRING'),
        'domain_name' => $app->input->get('chosen_domain', '', 'STRING'),
        'chosen_plan' => $app->input->get('chosen_plan', '', 'STRING'),
        'chosen_location' => $app->input->get('chosen_location', '', 'STRING'),
        'chosen_type' => $app->input->get('chosen_type', '', 'STRING'),
        'chosen_id' => $app->input->get('chosen_id', '', 'INT'),
        'chosen_period' => $app->input->get('chosen_period', '', 'INT')
    );
$session = JFactory::getSession();
$session->set('cart', $cart);
$cart_result = $session->get('cart');

echo "<pre>" . print_r($cart_result, TRUE) . "</pre>";
5
James Shaver

On dirait que vous créez un nouveau tableau de panier au lieu de commencer avec vos données stockées.

Essaye ça:

$session = JFactory::getSession();
$cart = $session->get('cart',array('items'=>array()));
$cart['items'][] = array(
        'action' => $app->input->get('action', 'add', 'STRING'),
        'domain_name' => $app->input->get('chosen_domain', '', 'STRING'),
        'chosen_plan' => $app->input->get('chosen_plan', '', 'STRING'),
        'chosen_location' => $app->input->get('chosen_location', '', 'STRING'),
        'chosen_type' => $app->input->get('chosen_type', '', 'STRING'),
        'chosen_id' => $app->input->get('chosen_id', '', 'INT'),
        'chosen_period' => $app->input->get('chosen_period', '', 'INT')
    );
$session->set('cart', $cart);
$cart_result = $session->get('cart');

echo "<pre>" . print_r($cart_result, TRUE) . "</pre>";
5
Michael