ti-enxame.com

Unir dados da sessão com sql-query e exibir no módulo

Estou desenvolvendo um módulo para exibir produtos adicionados à sessão do Joomla. Os produtos estão sendo adicionados à sessão usando o 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);

e posso obter esses produtos para exibição usando o 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'];
    }
}

Isso funciona perfeitamente. Mas preciso exibir os produtos como nomes e preços recuperados do banco de dados com quantidades armazenadas na sessão. Então, em mod_mymodule/helper.php Eu preciso de 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();

e return $items;, mas incluindo quantidades, ou seja, com $result['quan']; e para exibir em mod_mymodule/tmpl/default.php como:

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

Infelizmente, mesmo quando exibo produtos sem quantidades, usando a consulta acima, recebo apenas o último produto em vez de todos os produtos armazenados na sessão. Portanto, tenho dois problemas: não sei como exibir TODOS os produtos e como exibi-los com quantidades da sessão.

2
stckvrw

Ok, resolvi o primeiro problema com o 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;

Agora, o segundo problema em relação às quantidades permanece

0
stckvrw

Consulta: Busque também o ID do item.

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

Loop: faça um loop sobre os itens buscados e compare com o array na sessão

foreach($items as $item) {

    foreach ($results as $result){

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