web-dev-qa-db-fra.com

Joindre des données de session avec sql-query et les afficher dans le module

Je développe un module pour afficher les produits ajoutés à la session Joomla. Les produits sont ajoutés à la session en utilisant le code:

$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);

et je peux obtenir ces produits pour l'affichage en utilisant le code:

$cart_result = $session->get('cart');
$keys = array_keys($cart_result);
$tmp = array_values($cart_result);
$count = count(array_shift($tmp));
for ($i = 0; $i<$count; $i++) 
{
    $results = array();
    foreach ($keys as $key) 
    {
        $results[$key] = $cart_result[$key][$i];
    }
    foreach ($results as $result)
    {
        echo $result['itemid'];
        echo $result['quan'];
    }
}

Cela fonctionne parfaitement. Mais je dois afficher les produits sous forme de noms et de prix extraits de la base de données avec les quantités stockées dans la session. Donc, dans mod_mymodule/helper.php j'ai besoin de quelque chose comme:

...
$ids = array();
foreach ($results as $result)
{
    $ids[] = $result['itemid'];
}
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('name','price')))
      ->from($db->quoteName('#__products'))
      ->where($db->quoteName('id')." IN (".implode(',', $ids).")");
$db->setQuery($query);
$items = $db->loadObjectList();

et return $items; mais avec les quantités, c'est-à-dire avec $result['quan']; et à afficher dans mod_mymodule/tmpl/default.php comme:

foreach($items as $item) {
    echo $item->name.$item->price.$item->quan;
}

Malheureusement, même lorsque j'affiche des produits sans quantités en utilisant la requête ci-dessus, je n'obtiens que le dernier produit à la place de tous les produits stockés dans la session. J'ai donc deux problèmes: je ne sais pas comment afficher TOUS les produits ni comment les afficher avec les quantités de la session.

2
stckvrw

Ok, j'ai résolu le premier problème avec le code:

$ids = array();
foreach($cart_result['items'] as $result) {
    $ids[] = $result['itemid'];
}
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('name','price')))
    ->from($db->quoteName('#__products'))
    ->where($db->quoteName('id')." IN (".implode(',', $ids).")");
$db->setQuery($query);
$items = $db->loadObjectList();
return $items;

Maintenant, le deuxième problème concernant les quantités reste

0
stckvrw

Requête: Récupère également l'identifiant de l'article.

$query->select($db->quoteName(array('id', 'name','price')))
      ->from($db->quoteName('#__products'))
      ->where($db->quoteName('id')." IN (".implode(',', $ids).")");

Boucle: boucle sur les éléments récupérés et comparaison avec le tableau en session

foreach($items as $item) {

    foreach ($results as $result){

       if($item->id == $result['itemid'])
       {
          echo $item->name.$item->price.$result['quan'];
       }
    }
}
2
Nagarjun