public function initContent() { if (!$this->errors) { $lampStart = 0; $lampLimit = 5; $lampOrderBy = 'id_product'; $lampOrderWay = 'ASC'; $lampOnlyActive = true; $lampIdCategory = 42; $id_lang = (int) $this->context->language->id; $lampIdCategories = CategoryCore::getChildren($lampIdCategory, $id_lang); Product::getProducts($id_lang, $lampStart, $lampLimit, $lampOrderBy, $lampOrderWay, $lampIdCategory, $lampOnlyActive); $prod = $this->product; $this->context->smarty->assign(array('HOOK_LAMP_ACCESSORIES' => Hook::exec('lampAccessories'))); } parent::initContent(); $this->setTemplate(_PS_THEME_DIR_ . 'product.tpl'); }
public function hookLampAccessories(&$params) { $la_itemcount = Configuration::get('LAMPACCESSORIES_ITEMCOUNT'); if (empty($la_itemcount)) { $la_itemcount = 4; Configuration::set('LAMPACCESSORIES_ITEMCOUNT', 4); } $la_tabcount = Configuration::get('LAMPACCESSORIES_TABCOUNT'); if (empty($la_tabcount)) { $la_tabcount = 4; Configuration::set('LAMPACCESSORIES_TABCOUNT', 4); } $context = Context::getContext(); $controller = $context->controller; $id_lang = (int) $context->language->id; /** * @var $prod Product */ $prod = $controller->getProduct(); if (empty($prod)) { return ''; } $features = $prod->getFeatures($id_lang); $id_feature_value = null; $id_feature_values = array(); $power_ids = array(152, 28, 87, 7, 183, 64, 270, 22, 247, 253, 267, 217, 298, 231, 209); $sql = "SELECT v.*, l.*, l_n.id_feature_value AS id_feature_value_n, v_n.id_feature AS id_feature2\nFROM `ps_feature_value` v\nJOIN ps_feature_value_lang l\n\tON l.`id_feature_value` = v.`id_feature_value`\nAND l.id_lang = 1\nAND id_feature = 15\nJOIN ps_feature_value_lang l_n\n ON l_n.value = l.value\nJOIN ps_feature_value v_n\n ON v_n.id_feature_value = l_n.id_feature_value\n AND v_n.id_feature IN (41, 42, 40)\n "; $lampTypeFVs = Db::getInstance()->executeS($sql); $lampTypeN_Values = array(); //id_feature для тип лампочки 1,2,3 (id_feature 40-42) => id_feature для тип лампы (id_feature 15) foreach ($lampTypeFVs as $ltfv) { $lampTypeN_Values[$ltfv['id_feature_value_n']][] = $ltfv['id_feature_value']; } foreach ($features as $feature) { if ($feature['id_feature'] == 16) { //Тип цоколя $id_feature_value = $feature['id_feature_value']; $id_feature_values[] = $feature['id_feature_value']; } if (in_array($feature['id_feature'], array(40, 41, 42))) { //Тип лампы 1,2,3 if (!isset($id_feature_values[15])) { $id_feature_values[15] = array(); } $id_feature_value = $lampTypeN_Values[$feature['id_feature_value']]; $id_feature_values[15] = array_merge($id_feature_values[15], $lampTypeN_Values[$feature['id_feature_value']]); //15 - Тип лампы } if ($feature['id_feature'] == 14) { //Мощность лампы $power_ind = array_search($feature['id_feature_value'], $power_ids); if ($power_ind === false) { $id_feature_values[] = $feature['id_feature_value']; } else { $id_feature_values[] = array_slice($power_ids, $power_ind); } } // if($feature['id_feature'] == 38) { //Класс лампы // $id_feature_values[] = $feature['id_feature_value']; // } if ($feature['id_feature'] == 43) { //Код лампочек $id_feature_values[] = $feature['id_feature_value']; } } if (empty($id_feature_value)) { return ''; } $lampIdCategory = 42; $lampIdCategories = array($lampIdCategory); $lampCategories = CategoryCore::getChildren($lampIdCategory, $id_lang); foreach ($lampCategories as $lampCategory) { $lampIdCategories[] = $lampCategory['id_category']; } $sCatIds = join(', ', $lampIdCategories); // $sCatIds=$prod->id_category_default; $sIdFeatureValues = join(', ', $id_feature_values); $sIdFeatureValues = ''; $id_feature_values_count = count($id_feature_values); $i = 0; foreach ($id_feature_values as $id_fv) { // $id_fv = $id_feature_values[$i]; $sIdFeatureValues .= "\n JOIN ps_feature_product f{$i}\n ON f{$i}.id_product = p.id_product\n AND f{$i}.id_feature_value " . (is_array($id_fv) ? " IN (" . join(', ', $id_fv) . ") " : " = {$id_fv}") . "\n"; $i++; } // $sql = "SELECT p.*, pl.*, cl.name AS category, f.*, i.id_image $sql = "SELECT p.*, pl.*, cl.name AS category, i.id_image\n FROM ps_product p\n JOIN ps_product_lang pl ON pl.id_product = p.id_product AND pl.id_lang={$id_lang}\n JOIN ps_category_lang cl ON cl.id_category=p.id_category_default AND cl.id_lang={$id_lang}\n {$sIdFeatureValues}\n LEFT JOIN ps_image i\n ON i.id_product = p.id_product\n AND i.cover=1\n WHERE p.id_category_default IN ({$sCatIds}) AND p.active=1\n ORDER BY p.price DESC\n "; if ($_REQUEST['debug'] == 2) { echo $sql; print_r($lampTypeN_Values); print_r($id_feature_values); echo "\nsIdFeatureValues = {$sIdFeatureValues}"; } // $sql = "SELECT p.*, pl.*, cl.name AS category, i.id_image // FROM ps_product p // JOIN ps_product_lang pl ON pl.id_product = p.id_product AND pl.id_lang={$id_lang} // JOIN ps_category_lang cl ON cl.id_category=p.id_category_default AND cl.id_lang={$id_lang} // JOIN ps_feature_product f // ON f.id_product = p.id_product // AND f.id_feature_value = {$id_feature_value} // LEFT JOIN ps_image i // ON i.id_product = p.id_product // AND i.cover=1 // WHERE p.id_category_default IN ($sCatIds) AND p.active=1 // ORDER BY p.price DESC // "; $lampAccessoriesAll = Db::getInstance()->executeS($sql); $lampAccessories = array(); $lampAccessoriesCount = array(); foreach ($lampAccessoriesAll as $lampAccessory) { if (count($lampAccessories[$lampAccessory['category']]) >= $la_itemcount) { continue; } $imageLink = Link::getImageLink($lampAccessory['link_rewrite'], $lampAccessory['id_image']); $productLink = $context->link->getProductLink($lampAccessory); $lampAccessory['url'] = $productLink; $lampAccessory['image_link'] = 'http://' . $imageLink; $lampAccessories[$lampAccessory['category']][] = $lampAccessory; } foreach ($lampAccessories as $ind => $cat) { $lampAccessoriesCount[$ind] = count($cat); } arsort($lampAccessoriesCount); $lampAccessoriesSorted = array(); foreach ($lampAccessoriesCount as $ind => $count) { $lampAccessoriesSorted[] = $lampAccessories[$ind]; } $lampAccessories = array_slice($lampAccessoriesSorted, 0, $la_tabcount); $this->context->smarty->assign(array('lampaccessories' => $lampAccessories, 'my_module_name' => Configuration::get('LAMPACCESSORIES_NAME'), 'my_module_link' => $this->context->link->getModuleLink('lampaccessories', 'display'))); return $this->display(__FILE__, 'lampaccessories.tpl'); }