From 40fa4df468ec73ada6e82cbe77dfcf9eb76eadb3 Mon Sep 17 00:00:00 2001 From: mDeflotte Date: Mon, 13 Feb 2012 09:55:07 +0000 Subject: [PATCH] // Blocklmayered : Fix bug with creation of layered_filter + On module installation a layered_filter is created --- modules/blocklayered/blocklayered.php | 326 ++++++++++++++------------ 1 file changed, 178 insertions(+), 148 deletions(-) diff --git a/modules/blocklayered/blocklayered.php b/modules/blocklayered/blocklayered.php index 109b5970a..5a2387647 100644 --- a/modules/blocklayered/blocklayered.php +++ b/modules/blocklayered/blocklayered.php @@ -102,24 +102,23 @@ class BlockLayered extends Module Configuration::deleteByName('PS_LAYERED_FILTER_PRICE_USETAX'); Configuration::deleteByName('PS_LAYERED_FILTER_CATEGORY_DEPTH'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_price_index'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_friendly_url'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_attribute_group'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_feature'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_feature_lang_value'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_category'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_filter'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_filter_shop'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_product_attribute'); + Db::getInstance()->execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_price_index'); + Db::getInstance()->execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_friendly_url'); + Db::getInstance()->execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_attribute_group'); + Db::getInstance()->execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_feature'); + Db::getInstance()->execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value'); + Db::getInstance()->execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_indexable_feature_lang_value'); + Db::getInstance()->execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_category'); + Db::getInstance()->execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_filter'); + Db::getInstance()->execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_product_attribute'); return parent::uninstall(); } private static function installPriceIndexTable() { - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_price_index`'); + Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_price_index`'); - Db::getInstance()->Execute(' + Db::getInstance()->execute(' CREATE TABLE `'._DB_PREFIX_.'layered_price_index` ( `id_product` INT NOT NULL, `id_currency` INT NOT NULL, @@ -133,8 +132,8 @@ class BlockLayered extends Module private function installFriendlyUrlTable() { - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_friendly_url`'); - Db::getInstance()->Execute(' + Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_friendly_url`'); + Db::getInstance()->execute(' CREATE TABLE `'._DB_PREFIX_.'layered_friendly_url` ( `id_layered_friendly_url` INT NOT NULL AUTO_INCREMENT, `url_key` varchar(32) NOT NULL, @@ -143,24 +142,24 @@ class BlockLayered extends Module PRIMARY KEY (`id_layered_friendly_url`), INDEX `id_lang` (`id_lang`)) ENGINE = '._MYSQL_ENGINE_); - Db::getInstance()->Execute('CREATE INDEX `url_key` ON `'._DB_PREFIX_.'layered_friendly_url`(url_key(5))'); + Db::getInstance()->execute('CREATE INDEX `url_key` ON `'._DB_PREFIX_.'layered_friendly_url`(url_key(5))'); } private function installIndexableAttributeTable() { // Attributes Groups - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_attribute_group`'); - Db::getInstance()->Execute(' + Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_attribute_group`'); + Db::getInstance()->execute(' CREATE TABLE `'._DB_PREFIX_.'layered_indexable_attribute_group` ( `id_attribute_group` INT NOT NULL, `indexable` BOOL NOT NULL DEFAULT 0, PRIMARY KEY (`id_attribute_group`)) ENGINE = '._MYSQL_ENGINE_); - Db::getInstance()->Execute(' + Db::getInstance()->execute(' INSERT INTO `'._DB_PREFIX_.'layered_indexable_attribute_group` SELECT id_attribute_group, 1 FROM `'._DB_PREFIX_.'attribute_group`'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_attribute_group_lang_value`'); - Db::getInstance()->Execute(' + Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_attribute_group_lang_value`'); + Db::getInstance()->execute(' CREATE TABLE `'._DB_PREFIX_.'layered_indexable_attribute_group_lang_value` ( `id_attribute_group` INT NOT NULL, `id_lang` INT NOT NULL, @@ -169,8 +168,8 @@ class BlockLayered extends Module PRIMARY KEY (`id_attribute_group`, `id_lang`)) ENGINE = '._MYSQL_ENGINE_); // Attributes - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_attribute_lang_value`'); - Db::getInstance()->Execute(' + Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_attribute_lang_value`'); + Db::getInstance()->execute(' CREATE TABLE `'._DB_PREFIX_.'layered_indexable_attribute_lang_value` ( `id_attribute` INT NOT NULL, `id_lang` INT NOT NULL, @@ -180,19 +179,19 @@ class BlockLayered extends Module // Features - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_feature`'); - Db::getInstance()->Execute(' + Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_feature`'); + Db::getInstance()->execute(' CREATE TABLE `'._DB_PREFIX_.'layered_indexable_feature` ( `id_feature` INT NOT NULL, `indexable` BOOL NOT NULL DEFAULT 0, PRIMARY KEY (`id_feature`)) ENGINE = '._MYSQL_ENGINE_); - Db::getInstance()->Execute(' + Db::getInstance()->execute(' INSERT INTO `'._DB_PREFIX_.'layered_indexable_feature` SELECT id_feature, 1 FROM `'._DB_PREFIX_.'feature`'); - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_feature_lang_value`'); - Db::getInstance()->Execute(' + Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_feature_lang_value`'); + Db::getInstance()->execute(' CREATE TABLE `'._DB_PREFIX_.'layered_indexable_feature_lang_value` ( `id_feature` INT NOT NULL, `id_lang` INT NOT NULL, @@ -201,8 +200,8 @@ class BlockLayered extends Module PRIMARY KEY (`id_feature`, `id_lang`)) ENGINE = '._MYSQL_ENGINE_); // Features values - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_feature_value_lang_value`'); - Db::getInstance()->Execute(' + Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_indexable_feature_value_lang_value`'); + Db::getInstance()->execute(' CREATE TABLE `'._DB_PREFIX_.'layered_indexable_feature_value_lang_value` ( `id_feature_value` INT NOT NULL, `id_lang` INT NOT NULL, @@ -217,8 +216,8 @@ class BlockLayered extends Module */ public function installProductAttributeTable() { - Db::getInstance()->Execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_product_attribute`'); - Db::getInstance()->Execute(' + Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'layered_product_attribute`'); + Db::getInstance()->execute(' CREATE TABLE `'._DB_PREFIX_.'layered_product_attribute` ( `id_attribute` int(10) unsigned NOT NULL, `id_product` int(10) unsigned NOT NULL, @@ -238,7 +237,7 @@ class BlockLayered extends Module else Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_product_attribute WHERE id_product = '.(int)$id_product); - Db::getInstance()->Execute('INSERT INTO `'._DB_PREFIX_.'layered_product_attribute` (`id_attribute`, `id_product`, `id_attribute_group`) + Db::getInstance()->execute('INSERT INTO `'._DB_PREFIX_.'layered_product_attribute` (`id_attribute`, `id_product`, `id_attribute_group`) SELECT pac.id_attribute, pa.id_product, ag.id_attribute_group FROM '._DB_PREFIX_.'product_attribute pa INNER JOIN '._DB_PREFIX_.'product_attribute_combination pac ON pac.id_product_attribute = pa.id_product_attribute @@ -258,7 +257,7 @@ class BlockLayered extends Module Db::getInstance()->execute('TRUNCATE '._DB_PREFIX_.'layered_friendly_url'); $attributeValuesByLang = array(); - $filters = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('SELECT lc.*, id_lang, name, link_rewrite, cl.id_category + $filters = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('SELECT lc.*, id_lang, name, link_rewrite, cl.id_category FROM '._DB_PREFIX_.'layered_category lc INNER JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = lc.id_category AND lc.id_category <> 1 ) GROUP BY type, id_value, id_lang'); @@ -269,7 +268,7 @@ class BlockLayered extends Module switch ($filter['type']) { case 'id_attribute_group': - $attributes = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + $attributes = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT agl.public_name name, a.id_attribute_group id_name, al.name value, a.id_attribute id_value, al.id_lang, liagl.url_name name_url_name, lial.url_name value_url_name FROM '._DB_PREFIX_.'attribute_group ag @@ -300,7 +299,7 @@ class BlockLayered extends Module break; case 'id_feature': - $features = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + $features = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT fl.name name, fl.id_feature id_name, fvl.id_feature_value id_value, fvl.value value, fl.id_lang, fl.id_lang, lifl.url_name name_url_name, lifvl.url_name value_url_name FROM '._DB_PREFIX_.'feature_lang fl @@ -330,7 +329,7 @@ class BlockLayered extends Module break; case 'category': - $categories = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + $categories = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT cl.name, cl.id_lang, c.id_category FROM '._DB_PREFIX_.'category c INNER JOIN '._DB_PREFIX_.'category_lang cl ON (c.id_category = cl.id_category) @@ -348,7 +347,7 @@ class BlockLayered extends Module break; case 'manufacturer': - $manufacturers = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + $manufacturers = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT m.name as name,l.id_lang as id_lang, id_manufacturer FROM '._DB_PREFIX_.'manufacturer m , '._DB_PREFIX_.'lang l WHERE l.id_lang = '.(int)$filter['id_lang'].' '); @@ -491,15 +490,15 @@ class BlockLayered extends Module if (!$params['id_feature'] || Tools::getValue('layered_indexable') === false) return; - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature WHERE id_feature = '.(int)$params['id_feature']); - Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_feature VALUES ('.(int)$params['id_feature'].', '.(int)Tools::getValue('layered_indexable').')'); + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature WHERE id_feature = '.(int)$params['id_feature']); + Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_feature VALUES ('.(int)$params['id_feature'].', '.(int)Tools::getValue('layered_indexable').')'); - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature_lang_value WHERE id_feature = '.(int)$params['id_feature']); // don't care about the id_lang + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature_lang_value WHERE id_feature = '.(int)$params['id_feature']); // don't care about the id_lang foreach (Language::getLanguages(false) as $language) { // Data are validated by method "hookPostProcessFeature" $id_lang = (int)$language['id_lang']; - Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_feature_lang_value + Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_feature_lang_value VALUES ('.(int)$params['id_feature'].', '.$id_lang.', \''.pSQL(Tools::link_rewrite(Tools::getValue('url_name_'.$id_lang))).'\', \''.pSQL(Tools::safeOutput(Tools::getValue('meta_title_'.$id_lang), true)).'\')'); } @@ -510,12 +509,12 @@ class BlockLayered extends Module if (!$params['id_feature_value']) return; - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature_value_lang_value WHERE id_feature_value = '.(int)$params['id_feature_value']); // don't care about the id_lang + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature_value_lang_value WHERE id_feature_value = '.(int)$params['id_feature_value']); // don't care about the id_lang foreach (Language::getLanguages(false) as $language) { // Data are validated by method "hookPostProcessFeatureValue" $id_lang = (int)$language['id_lang']; - Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_feature_value_lang_value + Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_feature_value_lang_value VALUES ('.(int)$params['id_feature_value'].', '.$id_lang.', \''.pSQL(Tools::link_rewrite(Tools::getValue('url_name_'.$id_lang))).'\', \''.pSQL(Tools::safeOutput(Tools::getValue('meta_title_'.$id_lang), true)).'\')'); } @@ -525,7 +524,7 @@ class BlockLayered extends Module { if (!$params['id_feature_value']) return; - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature_value_lang_value WHERE id_feature_value = '.(int)$params['id_feature_value']); + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature_value_lang_value WHERE id_feature_value = '.(int)$params['id_feature_value']); } public function hookPostProcessFeatureValue($params) @@ -547,7 +546,7 @@ class BlockLayered extends Module else $return = ''; - $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS( + $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS( 'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_feature_value_lang_value WHERE id_feature_value = '.(int)$params['id_feature_value']); if ($result) @@ -597,12 +596,12 @@ class BlockLayered extends Module if (!$params['id_attribute']) return; - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_lang_value WHERE id_attribute = '.(int)$params['id_attribute']); // don't care about the id_lang + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_lang_value WHERE id_attribute = '.(int)$params['id_attribute']); // don't care about the id_lang foreach (Language::getLanguages(false) as $language) { // Data are validated by method "hookPostProcessAttribute" $id_lang = (int)$language['id_lang']; - Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_attribute_lang_value + Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_attribute_lang_value VALUES ('.(int)$params['id_attribute'].', '.$id_lang.', \''.pSQL(Tools::link_rewrite(Tools::getValue('url_name_'.$id_lang))).'\', \''.pSQL(Tools::safeOutput(Tools::getValue('meta_title_'.$id_lang), true)).'\')'); } @@ -612,7 +611,7 @@ class BlockLayered extends Module { if (!$params['id_attribute']) return; - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_lang_value WHERE id_attribute = '.(int)$params['id_attribute']); + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_lang_value WHERE id_attribute = '.(int)$params['id_attribute']); } public function hookPostProcessAttribute($params) @@ -634,7 +633,7 @@ class BlockLayered extends Module else $return = ''; - $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS( + $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS( 'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_attribute_lang_value WHERE id_attribute = '.(int)$params['id_attribute']); if ($result) @@ -687,7 +686,7 @@ class BlockLayered extends Module { if (!$params['id_feature']) return; - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature WHERE id_feature = '.(int)$params['id_feature']); + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_feature WHERE id_feature = '.(int)$params['id_feature']); } public function hookAfterSaveAttributeGroup($params) @@ -695,15 +694,15 @@ class BlockLayered extends Module if (!$params['id_attribute_group'] || Tools::getValue('layered_indexable') === false) return; - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group WHERE id_attribute_group = '.(int)$params['id_attribute_group']); - Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_attribute_group VALUES ('.(int)$params['id_attribute_group'].', '.(int)Tools::getValue('layered_indexable').')'); + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group WHERE id_attribute_group = '.(int)$params['id_attribute_group']); + Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_attribute_group VALUES ('.(int)$params['id_attribute_group'].', '.(int)Tools::getValue('layered_indexable').')'); - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value WHERE id_attribute_group = '.(int)$params['id_attribute_group']); // don't care about the id_lang + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value WHERE id_attribute_group = '.(int)$params['id_attribute_group']); // don't care about the id_lang foreach (Language::getLanguages(false) as $language) { // Data are validated by method "hookPostProcessAttributeGroup" $id_lang = (int)$language['id_lang']; - Db::getInstance()->Execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value + Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value VALUES ('.(int)$params['id_attribute_group'].', '.$id_lang.', \''.pSQL(Tools::link_rewrite(Tools::getValue('url_name_'.$id_lang))).'\', \''.pSQL(Tools::safeOutput(Tools::getValue('meta_title_'.$id_lang), true)).'\')'); } @@ -735,8 +734,8 @@ class BlockLayered extends Module if (!$params['id_attribute_group']) return; - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group WHERE id_attribute_group = '.(int)$params['id_attribute_group']); - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value WHERE id_attribute_group = '.(int)$params['id_attribute_group']); + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group WHERE id_attribute_group = '.(int)$params['id_attribute_group']); + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value WHERE id_attribute_group = '.(int)$params['id_attribute_group']); } public function hookAttributeGroupForm($params) @@ -747,7 +746,7 @@ class BlockLayered extends Module WHERE id_attribute_group = '.(int)$params['id_attribute_group']); $langValue = array(); - $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS( + $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS( 'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_attribute_group_lang_value WHERE id_attribute_group = '.(int)$params['id_attribute_group']); if ($result) @@ -820,7 +819,7 @@ class BlockLayered extends Module $indexable = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT indexable FROM '._DB_PREFIX_.'layered_indexable_feature WHERE id_feature = '.(int)$params['id_feature']); $langValue = array(); - $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS( + $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS( 'SELECT url_name, meta_title, id_lang FROM '._DB_PREFIX_.'layered_indexable_feature_lang_value WHERE id_feature = '.(int)$params['id_feature']); if ($result) @@ -983,7 +982,7 @@ class BlockLayered extends Module WHERE `active` = 1 AND psi.id_product is null ORDER by id_product LIMIT 0,'.(int)$length; - foreach (Db::getInstance()->ExecuteS($query) as $product) + foreach (Db::getInstance()->executeS($query) as $product) self::indexProductPrices((int)$product['id_product'], ($smart && $full)); return (int)($cursor + $length); @@ -995,7 +994,7 @@ class BlockLayered extends Module if (is_null($groups)) { - $groups = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('SELECT id_group FROM `'._DB_PREFIX_.'group_reduction`'); + $groups = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('SELECT id_group FROM `'._DB_PREFIX_.'group_reduction`'); if (!$groups) $groups = array(); } @@ -1039,7 +1038,7 @@ class BlockLayered extends Module else $maxTaxRate = 0; - $productMinPrices = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + $productMinPrices = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT id_shop, id_currency, id_country, id_group, from_quantity FROM `'._DB_PREFIX_.'specific_price` WHERE id_product = '.(int)$idProduct); @@ -1111,7 +1110,7 @@ class BlockLayered extends Module '.(int)$minPrice[$currency['id_currency']].', '.(int)Tools::ps_round($maxPrice[$currency['id_currency']] * (100 + $maxTaxRate) / 100, 0).')'; - Db::getInstance()->Execute(' + Db::getInstance()->execute(' INSERT INTO `'._DB_PREFIX_.'layered_price_index` (id_product, id_currency, id_shop, price_min, price_max) VALUES '.implode(',', $values).' ON DUPLICATE KEY UPDATE id_product = id_product # avoid duplicate keys'); @@ -1213,7 +1212,17 @@ class BlockLayered extends Module public function hookCategoryDeletion($params) { - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_category WHERE id_category = '.(int)$params['category']->id); + $layered_filter_list = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('SELECT * FROM '._DB_PREFIX_.'layered_filter'); + foreach ($layered_filter_list as $layered_filter) + { + $data = unserialize($layered_filter_list['filters']); + if (in_array((int)$params['category']->id, $data['categories'])) + { + unset($data['categories'][array_search((int)$params['category']->id, $data['categories'])]); + Db::getInstance()->execute('UPDATE `'._DB_PREFIX_.'layered_filter` SET `filters` = \''.pSQL(serialize($data)).'\''); + } + } + $this->buildLayeredCategories(); } public function getContent() @@ -1235,12 +1244,15 @@ class BlockLayered extends Module else { if (isset($_POST['id_layered_filter']) && $_POST['id_layered_filter']) - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_filter WHERE id_layered_filter = '.(int)Tools::getValue('id_layered_filter')); + { + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_filter WHERE id_layered_filter = '.(int)Tools::getValue('id_layered_filter')); + $this->buildLayeredCategories(); + } if (Tools::getValue('scope') == 1) { - Db::getInstance()->Execute('TRUNCATE TABLE '._DB_PREFIX_.'layered_filter'); - $categories = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('SELECT id_category FROM '._DB_PREFIX_.'category'); + Db::getInstance()->execute('TRUNCATE TABLE '._DB_PREFIX_.'layered_filter'); + $categories = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('SELECT id_category FROM '._DB_PREFIX_.'category'); foreach ($categories as $category) $_POST['categoryBox'][] = (int)$category['id_category']; } @@ -1275,24 +1287,15 @@ class BlockLayered extends Module if (isset($_POST['categoryBox']) && is_array($_POST['categoryBox'])) foreach ($_POST['categoryBox'] as &$categoryBoxTmp) $categoryBoxTmp = (int)$categoryBoxTmp; - - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_category - WHERE - id_category IN ('.implode(',', array_map('intval', $_POST['categoryBox'])).') - AND id_shop IN ('.implode(',', $shop_list).')'); $filterValues = array(); foreach ($_POST['categoryBox'] as $idc) $filterValues['categories'][] = (int)$idc; - - - - $sqlToInsert = 'INSERT INTO '._DB_PREFIX_.'layered_category (id_category, id_shop, id_value, type, position, filter_show_limit, filter_type) VALUES '; + $filterValues['shop_list'] = $shop_list; + $values = false; foreach ($_POST['categoryBox'] as $id_category_layered) { - $n = 0; - foreach ($_POST as $key => $value) if (substr($key, 0, 17) == 'layered_selection' && $value == 'on') { @@ -1308,32 +1311,8 @@ class BlockLayered extends Module 'filter_type' => (int)$type, 'filter_show_limit' => (int)$limit ); - $n++; - foreach ($shop_list as $id_shop) - { - if ($key == 'layered_selection_stock') - $sqlToInsert .= '('.(int)$id_category_layered.', '.(int)$id_shop.', NULL,\'quantity\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; - else if ($key == 'layered_selection_subcategories') - $sqlToInsert .= '('.(int)$id_category_layered.', '.(int)$id_shop.', NULL,\'category\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; - else if ($key == 'layered_selection_condition') - $sqlToInsert .= '('.(int)$id_category_layered.', '.(int)$id_shop.', NULL,\'condition\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; - else if ($key == 'layered_selection_weight_slider') - $sqlToInsert .= '('.(int)$id_category_layered.', '.(int)$id_shop.', NULL,\'weight\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; - else if ($key == 'layered_selection_price_slider') - $sqlToInsert .= '('.(int)$id_category_layered.', '.(int)$id_shop.', NULL,\'price\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; - else if ($key == 'layered_selection_manufacturer') - $sqlToInsert .= '('.(int)$id_category_layered.', '.(int)$id_shop.', NULL,\'manufacturer\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; - else if (substr($key, 0, 21) == 'layered_selection_ag_') - $sqlToInsert .= '('.(int)$id_category_layered.', '.(int)$id_shop.', '.(int)str_replace('layered_selection_ag_', '', $key).', - \'id_attribute_group\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; - else if (substr($key, 0, 23) == 'layered_selection_feat_') - $sqlToInsert .= '('.(int)$id_category_layered.', '.(int)$id_shop.', '.(int)str_replace('layered_selection_feat_', '', $key).', - \'id_feature\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; - } } } - if ($values) - Db::getInstance()->Execute(rtrim($sqlToInsert, ',')); $valuesToInsert = array( 'name' => pSQL(Tools::getValue('layered_tpl_name')), @@ -1344,16 +1323,7 @@ class BlockLayered extends Module $valuesToInsert['id_layered_filter'] = (int)Tools::getValue('id_layered_filter'); Db::getInstance()->autoExecute(_DB_PREFIX_.'layered_filter', $valuesToInsert, 'INSERT'); - - if (version_compare(_PS_VERSION_,'1.5','>')) - { - Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_filter_shop WHERE `id_layered_filter` = '.(int)$id_layered_filter); - - if (isset($assos)) - foreach ($assos as $asso) - Db::getInstance()->execute('INSERT INTO layered_filter_shop (`id_layered_filter`, `id_shop`) - VALUES('.$id_layered_filter.', '.(int)$asso['id_shop'].')'); - } + $this->buildLayeredCategories(); $html .= '
'.(version_compare(_PS_VERSION_,'1.5','>') ? '' : ''). $this->l('Your filter').' "'.Tools::safeOutput(Tools::getValue('layered_tpl_name')).'" '. @@ -1383,7 +1353,8 @@ class BlockLayered extends Module if ($layeredValues) { - Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_filter WHERE id_layered_filter = '.(int)$_GET['id_layered_filter'].' LIMIT 1'); + Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_filter WHERE id_layered_filter = '.(int)$_GET['id_layered_filter'].' LIMIT 1'); + $this->buildLayeredCategories(); $html .= '
'.(version_compare(_PS_VERSION_,'1.5','>') ? '' : '').' @@ -1422,7 +1393,7 @@ class BlockLayered extends Module '; $categoryList = array(); - foreach (Db::getInstance()->ExecuteS('SELECT id_category FROM `'._DB_PREFIX_.'category`') as $category) + foreach (Db::getInstance()->executeS('SELECT id_category FROM `'._DB_PREFIX_.'category`') as $category) if ($category['id_category'] != 1) $categoryList[] = $category['id_category']; @@ -1582,7 +1553,7 @@ class BlockLayered extends Module
'.$this->l('Existing filters templates').''; - $filtersTemplates = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('SELECT * FROM '._DB_PREFIX_.'layered_filter ORDER BY date_add DESC'); + $filtersTemplates = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('SELECT * FROM '._DB_PREFIX_.'layered_filter ORDER BY date_add DESC'); if (count($filtersTemplates)) { $html .= '

'.count($filtersTemplates).' '.$this->l('filters templates are configured:').'

@@ -2303,7 +2274,7 @@ class BlockLayered extends Module else { $n = (int)Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE')); - $this->products = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + $this->products = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT p.id_product, p.on_sale, p.out_of_stock, p.available_for_order, p.quantity, p.minimal_quantity, p.id_category_default, p.customizable, p.show_price, p.`weight`, p.ean13, pl.available_later, pl.description_short, pl.link_rewrite, pl.name, i.id_image, il.legend, m.name manufacturer_name, p.condition, p.id_manufacturer, DATEDIFF(p.`date_add`, @@ -2604,7 +2575,7 @@ class BlockLayered extends Module { if (version_compare(_PS_VERSION_,'1.5','>')) $sqlQuery['from'] .= Context::getContext()->shop->addSqlAssociation('product', 'p'); - $products = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sqlQuery['select']."\n".$sqlQuery['from']."\n".$sqlQuery['join']."\n".$sqlQuery['where']."\n".$sqlQuery['group']); + $products = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sqlQuery['select']."\n".$sqlQuery['from']."\n".$sqlQuery['join']."\n".$sqlQuery['where']."\n".$sqlQuery['group']); } foreach ($filters as $filterTmp) @@ -2620,7 +2591,7 @@ class BlockLayered extends Module if (!empty($sqlQuery['second_query'])) { - $res = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sqlQuery['second_query']); + $res = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sqlQuery['second_query']); if ($res) $products = array_merge($products, $res); } @@ -2914,7 +2885,7 @@ class BlockLayered extends Module $nonIndexable = array(); // Get all non indexable attribute groups - foreach (Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + foreach (Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT public_name FROM `'._DB_PREFIX_.'attribute_group_lang` agl LEFT JOIN `'._DB_PREFIX_.'layered_indexable_attribute_group` liag @@ -2924,7 +2895,7 @@ class BlockLayered extends Module $nonIndexable[] = Tools::link_rewrite($attribute['public_name']); // Get all non indexable features - foreach (Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + foreach (Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT name FROM `'._DB_PREFIX_.'feature_lang` fl LEFT JOIN `'._DB_PREFIX_.'layered_indexable_feature` lif @@ -3244,7 +3215,7 @@ class BlockLayered extends Module foreach ($categoryBox as &$value) $value = (int)$value; - $attributeGroups = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + $attributeGroups = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT ag.id_attribute_group, ag.is_color_group, agl.name, COUNT(DISTINCT(a.id_attribute)) n FROM '._DB_PREFIX_.'attribute_group ag LEFT JOIN '._DB_PREFIX_.'attribute_group_lang agl ON (agl.id_attribute_group = ag.id_attribute_group) @@ -3257,7 +3228,7 @@ class BlockLayered extends Module (count($categoryBox) ? ' AND cp.id_category IN ('.implode(',', $categoryBox).')' : '').' GROUP BY ag.id_attribute_group'); - $features = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + $features = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT fl.id_feature, fl.name, COUNT(DISTINCT(fv.id_feature_value)) n FROM '._DB_PREFIX_.'feature_lang fl LEFT JOIN '._DB_PREFIX_.'feature_value fv ON (fv.id_feature = fl.id_feature) @@ -3463,15 +3434,12 @@ class BlockLayered extends Module $(\'#selected_filters li\').remove(); '; foreach ($layeredValues as $key => $layeredValue) - if ($key != 'categories') - { + if ($key != 'categories' && $key != 'shop_list') $html .= ' $(\'#'.$key.'\').click(); $(\'select[name='.$key.'_filter_type]\').val('.$layeredValue['filter_type'].'); $(\'select[name='.$key.'_filter_show_limit]\').val('.$layeredValue['filter_show_limit'].'); '; - - } if (isset($layeredValues['categories']) && count($layeredValues['categories'])) { @@ -3663,8 +3631,8 @@ class BlockLayered extends Module @ini_set('memory_limit', '128M'); /* Delete and re-create the layered categories table */ - Db::getInstance()->Execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_category'); - Db::getInstance()->Execute(' + Db::getInstance()->execute('DROP TABLE IF EXISTS '._DB_PREFIX_.'layered_category'); + Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'layered_category` ( `id_layered_category` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `id_shop` INT(11) UNSIGNED NOT NULL, @@ -3678,26 +3646,21 @@ class BlockLayered extends Module KEY `id_category` (`id_category`,`type`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;'); /* MyISAM + latin1 = Smaller/faster */ - Db::getInstance()->Execute(' + Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'layered_filter` ( `id_layered_filter` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(64) NOT NULL, `filters` TEXT NULL, `n_categories` INT(10) UNSIGNED NOT NULL, `date_add` DATETIME NOT NULL)'); - - Db::getInstance()->Execute(' - CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'layered_filter_shop` ( - `id_layered_filter` INT(10) UNSIGNED NOT NULL, - `id_shop` INT(11) UNSIGNED NOT NULL, - PRIMARY KEY (`id_layered_filter`, `id_shop`), - KEY `id_shop` (`id_shop`))'); } public function rebuildLayeredCache($productsIds = array(), $categoriesIds = array()) { @set_time_limit(0); + $filter_data = array('categories' => array()); + /* Set memory limit to 128M only if current is lower */ $memory_limit = @ini_get('memory_limit'); if (substr($memory_limit, -1) != 'G' && ((substr($memory_limit, -1) == 'M' && substr($memory_limit, 0, -1) < 128) || is_numeric($memory_limit) && (intval($memory_limit) < 131072))) @@ -3749,6 +3712,7 @@ class BlockLayered extends Module AND p.id_product IN ('.implode(',', $productsIds).')' : '').' AND (fv.custom IS NULL OR fv.custom = 0) GROUP BY p.id_product'); + $toInsert = false; while ($product = $db->nextRow($result)) { $a = $c = $f = array(); @@ -3764,67 +3728,133 @@ class BlockLayered extends Module else $shop_list = array(0); - $queryCategory = 'INSERT INTO '._DB_PREFIX_.'layered_category (id_category, id_shop, id_value, type, position) VALUES '; - $toInsert = false; + $filter_data['shop_list'] = $shop_list; + foreach ($shop_list as $id_shop) foreach ($c as $id_category => $category) { + if (!in_array($id_category, $filter_data['categories'])) + $filter_data['categories'][] = $id_category; + if (!isset($nCategories[(int)$id_category])) $nCategories[(int)$id_category] = 1; if (!isset($doneCategories[(int)$id_category]['cat'])) { + $filter_data['layered_selection_subcategories'] = array('filter_type' => 0, 'filter_show_limit' => 0); $doneCategories[(int)$id_category]['cat'] = true; - $queryCategory .= '('.(int)$id_category.', '.(int)$id_shop.', NULL,\'category\','.(int)$nCategories[(int)$id_category]++.'),'; $toInsert = true; } foreach ($a as $kAttribute => $attribute) if (!isset($doneCategories[(int)$id_category]['a'.(int)$attributeGroupsById[(int)$kAttribute]])) { + $filter_data['layered_selection_ag_'.(int)$attributeGroupsById[(int)$kAttribute]] = array('filter_type' => 0, 'filter_show_limit' => 0); $doneCategories[(int)$id_category]['a'.(int)$attributeGroupsById[(int)$kAttribute]] = true; - $queryCategory .= '('.(int)$id_category.', '.(int)$id_shop.','.(int)$attributeGroupsById[(int)$kAttribute].',\'id_attribute_group\','.(int)$nCategories[(int)$id_category]++.'),'; $toInsert = true; } foreach ($f as $kFeature => $feature) if (!isset($doneCategories[(int)$id_category]['f'.(int)$featuresById[(int)$kFeature]])) { + $filter_data['layered_selection_feat_'.(int)$featuresById[(int)$kFeature]] = array('filter_type' => 0, 'filter_show_limit' => 0); $doneCategories[(int)$id_category]['f'.(int)$featuresById[(int)$kFeature]] = true; - $queryCategory .= '('.(int)$id_category.', '.(int)$id_shop.', '.(int)$featuresById[(int)$kFeature].',\'id_feature\','.(int)$nCategories[(int)$id_category]++.'),'; $toInsert = true; } if (!isset($doneCategories[(int)$id_category]['q'])) { + $filter_data['layered_selection_stock'] = array('filter_type' => 0, 'filter_show_limit' => 0); $doneCategories[(int)$id_category]['q'] = true; - $queryCategory .= '('.(int)$id_category.', '.(int)$id_shop.', NULL,\'quantity\','.(int)$nCategories[(int)$id_category]++.'),'; $toInsert = true; } if (!isset($doneCategories[(int)$id_category]['m'])) { + $filter_data['layered_selection_manufacturer'] = array('filter_type' => 0, 'filter_show_limit' => 0); $doneCategories[(int)$id_category]['m'] = true; - $queryCategory .= '('.(int)$id_category.', '.(int)$id_shop.', NULL,\'manufacturer\','.(int)$nCategories[(int)$id_category]++.'),'; $toInsert = true; } if (!isset($doneCategories[(int)$id_category]['c'])) { + $filter_data['layered_selection_condition'] = array('filter_type' => 0, 'filter_show_limit' => 0); $doneCategories[(int)$id_category]['c'] = true; - $queryCategory .= '('.(int)$id_category.', '.(int)$id_shop.', NULL,\'condition\','.(int)$nCategories[(int)$id_category]++.'),'; $toInsert = true; } if (!isset($doneCategories[(int)$id_category]['w'])) { + $filter_data['layered_selection_weight_slider'] = array('filter_type' => 0, 'filter_show_limit' => 0); $doneCategories[(int)$id_category]['w'] = true; - $queryCategory .= '('.(int)$id_category.', '.(int)$id_shop.', NULL,\'weight\','.(int)$nCategories[(int)$id_category]++.'),'; $toInsert = true; } if (!isset($doneCategories[(int)$id_category]['p'])) { + $filter_data['layered_selection_price_slider'] = array('filter_type' => 0, 'filter_show_limit' => 0); $doneCategories[(int)$id_category]['p'] = true; - $queryCategory .= '('.(int)$id_category.', '.(int)$id_shop.', NULL,\'price\','.(int)$nCategories[(int)$id_category]++.'),'; $toInsert = true; } } - - if ($toInsert) - Db::getInstance()->Execute(rtrim($queryCategory, ',')); + } + if ($toInsert) + { + Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'layered_filter(name, filters, n_categories, date_add) + VALUES (\''.$this->l('My template').' '.date('Y-m-d').'\', \''.pSQL(serialize($filter_data)).'\', '.count($filter_data['categories']).', NOW())'); + $this->buildLayeredCategories(); } } + + public function buildLayeredCategories() + { + // Get all filter template + $res = Db::getInstance()->executeS('SELECT * FROM '._DB_PREFIX_.'layered_filter ORDER BY date_add DESC'); + $categories = array(); + + // Remove all from layered_category + Db::getInstance()->execute('TRUNCATE '._DB_PREFIX_.'layered_category'); + + if (!count($res)) // No filters templates defined, nothing else to do + return true; + + $sqlToInsert = 'INSERT INTO '._DB_PREFIX_.'layered_category (id_category, id_shop, id_value, type, position, filter_show_limit, filter_type) VALUES '; + $values = false; + foreach ($res as $filter_template) + { + $data = unserialize($filter_template['filters']); + foreach ($data['categories'] as $id_category) + { + $n = 0; + if (!in_array($id_category, $categories)) // Last definition, erase preivious categories defined + { + $categories[] = $id_category; + foreach ($data as $key => $value) + if (substr($key, 0, 17) == 'layered_selection') + { + $values = true; + $type = $value['filter_type']; + $limit = $value['filter_show_limit']; + $n++; + + foreach ($data['shop_list'] as $id_shop) + { + if ($key == 'layered_selection_stock') + $sqlToInsert .= '('.(int)$id_category.', '.(int)$id_shop.', NULL,\'quantity\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; + else if ($key == 'layered_selection_subcategories') + $sqlToInsert .= '('.(int)$id_category.', '.(int)$id_shop.', NULL,\'category\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; + else if ($key == 'layered_selection_condition') + $sqlToInsert .= '('.(int)$id_category.', '.(int)$id_shop.', NULL,\'condition\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; + else if ($key == 'layered_selection_weight_slider') + $sqlToInsert .= '('.(int)$id_category.', '.(int)$id_shop.', NULL,\'weight\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; + else if ($key == 'layered_selection_price_slider') + $sqlToInsert .= '('.(int)$id_category.', '.(int)$id_shop.', NULL,\'price\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; + else if ($key == 'layered_selection_manufacturer') + $sqlToInsert .= '('.(int)$id_category.', '.(int)$id_shop.', NULL,\'manufacturer\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; + else if (substr($key, 0, 21) == 'layered_selection_ag_') + $sqlToInsert .= '('.(int)$id_category.', '.(int)$id_shop.', '.(int)str_replace('layered_selection_ag_', '', $key).', + \'id_attribute_group\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; + else if (substr($key, 0, 23) == 'layered_selection_feat_') + $sqlToInsert .= '('.(int)$id_category.', '.(int)$id_shop.', '.(int)str_replace('layered_selection_feat_', '', $key).', + \'id_feature\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),'; + } + } + } + } + } + if ($values) + Db::getInstance()->execute(rtrim($sqlToInsert, ',')); + } }