executeS($query); Cache::store($cache_id, $result); return $result; } return Cache::retrieve($cache_id); } public static function getNestedCategories($root_category = null, $id_lang = false, $active = true, $groups = null, $use_shop_restriction = true, $sql_filter = '', $sql_sort = '', $sql_limit = '') { if (isset($root_category) && !Validate::isInt($root_category)) { die(Tools::displayError()); } if (!Validate::isBool($active)) { die(Tools::displayError()); } if (isset($groups) && Group::isFeatureActive() && !is_array($groups)) { $groups = (array)$groups; } $cache_id = 'Category::getNestedCategories_'.md5((int)$root_category.(int)$id_lang.(int)$active.(int)$use_shop_restriction .(isset($groups) && Group::isFeatureActive() ? implode('', $groups) : '')); if (!Cache::isStored($cache_id)) { $result = Db::getInstance()->executeS(' SELECT c.*, cl.* FROM `'._DB_PREFIX_.'category` c '.($use_shop_restriction ? Shop::addSqlAssociation('category', 'c') : '').' LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON c.`id_category` = cl.`id_category`'.Shop::addSqlRestrictionOnLang('cl').' '.(isset($groups) && Group::isFeatureActive() ? 'LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON c.`id_category` = cg.`id_category`' : '').' '.(isset($root_category) ? 'RIGHT JOIN `'._DB_PREFIX_.'category` c2 ON c2.`id_category` = '.(int)$root_category.' AND c.`nleft` >= c2.`nleft` AND c.`nright` <= c2.`nright`' : '').' WHERE 1 '.$sql_filter.' '.($id_lang ? 'AND `id_lang` = '.(int)$id_lang : '').' '.($active ? ' AND c.`active` = 1' : '').' '.(isset($groups) && Group::isFeatureActive() ? ' AND cg.`id_group` IN ('.implode(',', $groups).')' : '').' '.(!$id_lang || (isset($groups) && Group::isFeatureActive()) ? ' GROUP BY c.`id_category`' : '').' '.($sql_sort != '' ? $sql_sort : ' ORDER BY c.`level_depth` ASC').' '.($sql_sort == '' && $use_shop_restriction ? ', category_shop.`position` ASC' : '').' '.($sql_limit != '' ? $sql_limit : '') ); $categories = array(); $buff = array(); if (!isset($root_category)) { $root_category = Category::getRootCategory()->id; } foreach ($result as $row) { $current = &$buff[$row['id_category']]; $current = $row; if ($row['id_category'] == $root_category) { $categories[$row['id_category']] = &$current; } else { $buff[$row['id_parent']]['children'][$row['id_category']] = &$current; } } Cache::store($cache_id, $categories); } else { $categories = Cache::retrieve($cache_id); } return $categories; } public static function getAllCategoriesName($root_category = null, $id_lang = false, $active = true, $groups = null, $use_shop_restriction = true, $sql_filter = '', $sql_sort = '', $sql_limit = '') { if (isset($root_category) && !Validate::isInt($root_category)) { die(Tools::displayError()); } if (!Validate::isBool($active)) { die(Tools::displayError()); } if (isset($groups) && Group::isFeatureActive() && !is_array($groups)) { $groups = (array)$groups; } $cache_id = 'Category::getAllCategoriesName_'.md5((int)$root_category.(int)$id_lang.(int)$active.(int)$use_shop_restriction .(isset($groups) && Group::isFeatureActive() ? implode('', $groups) : '')); if (!Cache::isStored($cache_id)) { $result = Db::getInstance()->executeS(' SELECT c.id_category, cl.name FROM `'._DB_PREFIX_.'category` c '.($use_shop_restriction ? Shop::addSqlAssociation('category', 'c') : '').' LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON c.`id_category` = cl.`id_category`'.Shop::addSqlRestrictionOnLang('cl').' '.(isset($groups) && Group::isFeatureActive() ? 'LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON c.`id_category` = cg.`id_category`' : '').' '.(isset($root_category) ? 'RIGHT JOIN `'._DB_PREFIX_.'category` c2 ON c2.`id_category` = '.(int)$root_category.' AND c.`nleft` >= c2.`nleft` AND c.`nright` <= c2.`nright`' : '').' WHERE 1 '.$sql_filter.' '.($id_lang ? 'AND `id_lang` = '.(int)$id_lang : '').' '.($active ? ' AND c.`active` = 1' : '').' '.(isset($groups) && Group::isFeatureActive() ? ' AND cg.`id_group` IN ('.implode(',', $groups).')' : '').' '.(!$id_lang || (isset($groups) && Group::isFeatureActive()) ? ' GROUP BY c.`id_category`' : '').' '.($sql_sort != '' ? $sql_sort : ' ORDER BY c.`level_depth` ASC').' '.($sql_sort == '' && $use_shop_restriction ? ', category_shop.`position` ASC' : '').' '.($sql_limit != '' ? $sql_limit : '') ); Cache::store($cache_id, $result); } else { $result = Cache::retrieve($cache_id); } return $result; } }