public function ajaxProcessEditProductAttribute() { if ($this->tabAccess['edit'] === '1') { $id_product = (int) Tools::getValue('id_product'); $id_product_attribute = (int) Tools::getValue('id_product_attribute'); if ($id_product && Validate::isUnsignedId($id_product) && Validate::isLoadedObject($product = new Product((int) $id_product))) { $combinations = $product->getAttributeCombinationsById($id_product_attribute, $this->context->language->id); foreach ($combinations as $key => $combination) { $combinations[$key]['minimal_quantity'] = $product->resolveBoMinQty($combination['minimal_quantity'], $combination['minimal_quantity_fractional']); $combinations[$key]['attributes'][] = array($combination['group_name'], $combination['attribute_name'], $combination['id_attribute']); } die(Tools::jsonEncode($combinations)); } } }
/** * Returns the product attribute combination by id_product_attribute. * * For PS 1.4 we need to query the combinations manually, while newer version of PS provide a handy getter. * * @param Product|ProductCore $product the product model. * @param int $id_product_attribute the product attribute ID. * @param int $id_lang the language ID. * @return array the attribute combinations. */ protected function getProductAttributeCombinationsById($product, $id_product_attribute, $id_lang) { if (_PS_VERSION_ >= '1.5') { return $product->getAttributeCombinationsById($id_product_attribute, $id_lang); } return Db::getInstance()->ExecuteS(' SELECT pa.*, ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` group_name, al.`name` attribute_name, a.`id_attribute`, pa.`unit_price_impact` FROM `' . _DB_PREFIX_ . 'product_attribute` pa LEFT JOIN `' . _DB_PREFIX_ . 'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` LEFT JOIN `' . _DB_PREFIX_ . 'attribute_lang` al ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = ' . (int) $id_lang . ') LEFT JOIN `' . _DB_PREFIX_ . 'attribute_group_lang` agl ON (ag.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = ' . (int) $id_lang . ') WHERE pa.`id_product` = ' . (int) $product->id . ' AND pa.`id_product_attribute` = ' . (int) $id_product_attribute . ' GROUP BY pa.`id_product_attribute`, ag.`id_attribute_group` ORDER BY pa.`id_product_attribute`'); }
public function ajaxProcessEditProductAttribute() { if ($this->access('edit')) { $id_product = (int) Tools::getValue('id_product'); $id_product_attribute = (int) Tools::getValue('id_product_attribute'); if ($id_product && Validate::isUnsignedId($id_product) && Validate::isLoadedObject($product = new Product((int) $id_product))) { $combinations = $product->getAttributeCombinationsById($id_product_attribute, $this->context->language->id); foreach ($combinations as $key => $combination) { $combinations[$key]['attributes'][] = array($combination['group_name'], $combination['attribute_name'], $combination['id_attribute']); } die(json_encode($combinations)); } } }
public static function indexation($id_product = false, $update = false) { $id_lang = Cmsearch::getLangId(); $convermax = new ConvermaxAPI(); if (!$id_product) { if (!$convermax->batchStart()) { return false; } } $start = 0; while ($products = Cmsearch::getProductsToIndex($id_lang, $start, 200, $id_product)) { $start = $start + 200; if (count($products) == 0) { break; } $products_array = array(); $products_count = count($products); for ($i = 0; $i < $products_count; $i++) { if ($products[$i]['features']) { foreach ($products[$i]['features'] as $feature) { $f_name = 'f_' . $convermax->sanitize($feature['name']); $products[$i][$f_name][] = $feature['value']; } unset($products[$i]['features']); } foreach ($products[$i] as $key => $val) { if (is_array($val)) { foreach ($val as $k => $v) { if (is_array($v)) { unset($products[$i][$key]); } } } } $img_id = Product::getCover($products[$i]['id_product']); $link = new Link(); $img_link = $link->getImageLink($products[$i]['link_rewrite'], $img_id['id_image'], ImageType::getFormatedName('small')); $products[$i]['img_link'] = str_replace(Tools::getHttpHost(), '', $img_link); $products[$i]['link'] = str_replace(Tools::getHttpHost(true), '', $products[$i]['link']); $cat_full = Product::getProductCategoriesFull($products[$i]['id_product']); $category_full = array(); $home_category = Configuration::get('PS_HOME_CATEGORY'); foreach ($cat_full as $cat) { $category = new Category($cat['id_category']); $categories = $category->getParentsCategories(); $c_full = array(); foreach ($categories as $cats) { if ($cats['id_category'] != $home_category) { $c_full[] = $cats['name']; } } if (!empty($c_full)) { $category_full[] = implode('>', array_reverse($c_full)); } } $products[$i]['category_full'] = $category_full; $products[$i]['ean13'] = array($products[$i]['ean13']); $products[$i]['upc'] = array($products[$i]['upc']); $products[$i]['reference'] = array($products[$i]['reference']); $products[$i]['supplier_reference'] = array($products[$i]['supplier_reference']); $product = new Product($products[$i]['id_product']); $combinations = Product::getProductAttributesIds($products[$i]['id_product']); $attribs = array(); $ean13 = array(); $upc = array(); $reference = array(); $supplier_reference = array(); foreach ($combinations as $combination) { $comb = $product->getAttributeCombinationsById($combination['id_product_attribute'], $id_lang); foreach ($comb as $com) { $a_name = 'a_' . $convermax->sanitize($com['group_name']); if ($com['is_color_group'] == 1) { $attribs[$a_name][] = $com['id_attribute']; } else { $attribs[$a_name][] = $com['attribute_name']; } if (!empty($com['ean13'])) { $ean13[] = $com['ean13']; } if (!empty($com['upc'])) { $upc[] = $com['upc']; } if (!empty($com['reference'])) { $reference[] = $com['reference']; } if (!empty($com['supplier_reference'])) { $supplier_reference[] = $com['supplier_reference']; } } } foreach ($attribs as $k => $v) { $products[$i][$k] = array_values(array_unique($v)); } if (!empty($ean13)) { $products[$i]['ean13'] = array_merge((array) $products[$i]['ean13'], array_unique($ean13)); } if (!empty($upc)) { $products[$i]['upc'] = array_merge((array) $products[$i]['upc'], array_unique($upc)); } if (!empty($reference)) { $products[$i]['reference'] = array_merge((array) $products[$i]['reference'], array_unique($reference)); } if (!empty($supplier_reference)) { $products[$i]['supplier_reference'] = array_merge((array) $products[$i]['supplier_reference'], array_unique($supplier_reference)); } if (!in_array($products[$i]['id_product'], $products_array)) { $products_array[] = (int) $products[$i]['id_product']; } } if ($update) { if (!$convermax->update($products)) { return false; } } elseif ($id_product) { if (!$convermax->add($products)) { return false; } } elseif (!$convermax->batchAdd($products)) { return false; } if ($id_product) { break; } } if (!$id_product) { if (!$convermax->batchEnd()) { return false; } } return true; }