/** * Returns Packs that conatins the given product in the right declinaison. * * @param integer $id_item Product item id that could be contained in a|many pack(s) * @param integer $id_attribute_item The declinaison of the product * @param integer $id_lang * @return array[Product] Packs that contains the given product */ public static function getPacksContainingItem($id_item, $id_attribute_item, $id_lang) { if (!Pack::isFeatureActive() || !$id_item) { return array(); } $query = 'SELECT `id_product_pack`, `quantity` FROM `' . _DB_PREFIX_ . 'pack` WHERE `id_product_item` = ' . (int) $id_item; if (Combination::isFeatureActive()) { $query .= ' AND `id_product_attribute_item` = ' . (int) $id_attribute_item; } $result = Db::getInstance()->executeS($query); $array_result = array(); foreach ($result as $row) { $p = new Product($row['id_product_pack'], true, $id_lang); $p->loadStockData(); $p->pack_item_quantity = $row['quantity']; // Specific need from StockAvailable::updateQuantity() $array_result[] = $p; } return $array_result; }
public static function getPacksTable($id_product, $id_lang, $full = false, $limit = null) { if (!Pack::isFeatureActive()) { return array(); } $packs = Db::getInstance()->getValue(' SELECT GROUP_CONCAT(a.`id_product_pack`) FROM `' . _DB_PREFIX_ . 'pack` a WHERE a.`id_product_item` = ' . (int) $id_product); if (!(int) $packs) { return array(); } $sql = ' SELECT p.*, product_shop.*, pl.*, MAX(image_shop.`id_image`) id_image, il.`legend` FROM `' . _DB_PREFIX_ . 'product` p NATURAL LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ' . Shop::addSqlAssociation('product', 'p') . ' LEFT JOIN `' . _DB_PREFIX_ . 'image` i ON (i.`id_product` = p.`id_product`)' . Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1') . ' LEFT JOIN `' . _DB_PREFIX_ . 'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = ' . (int) $id_lang . ') WHERE pl.`id_lang` = ' . (int) $id_lang . ' ' . Shop::addSqlRestrictionOnLang('pl') . ' AND p.`id_product` IN (' . $packs . ') GROUP BY product_shop.id_product'; if ($limit) { $sql .= ' LIMIT ' . (int) $limit; } $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); if (!$full) { return $result; } $array_result = array(); foreach ($result as $row) { if (!Pack::isPacked($row['id_product'])) { $array_result[] = Product::getProductProperties($id_lang, $row); } } return $array_result; }