it-swarm-es.com

Unir datos de la sesión con sql-query y mostrarlos en el módulo

Estoy desarrollando un módulo para mostrar productos que se agregan a la sesión de Joomla. Los productos se agregan a la sesión utilizando el código:

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

y puedo obtener estos productos para mostrarlos usando el código:

$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'];
    }
}

Eso funciona perfectamente Pero necesito mostrar los productos como nombres y precios que se recuperan de la base de datos con cantidades almacenadas en la sesión. Entonces en mod_mymodule/helper.php Necesito algo como:

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

y return $items; pero incluyendo cantidades, es decir, con $result['quan']; y para mostrar en mod_mymodule/tmpl/default.php like:

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

Desafortunadamente, incluso cuando visualizo productos sin cantidades usando la consulta anterior, obtengo solo el último producto en lugar de todos los productos almacenados en la sesión. Entonces tengo dos problemas: no sé cómo mostrar TODOS los productos y cómo mostrarlos con cantidades de la sesión.

2
stckvrw

Ok, resolví el primer problema con el código:

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

Ahora queda el segundo problema con respecto a las cantidades

0
stckvrw

Consulta: Obtener la identificación del elemento también.

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

Bucle: recorre los elementos recuperados y compáralos con la matriz en la sesión

foreach($items as $item) {

    foreach ($results as $result){

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