public function setRootCategory($value) { if (!JeproshopTools::isInt($value)) { JError::raiseWarning(500, JText::_('COM_JEPROSHOP_ROOT_CATEGORY_MUST_BE_AN_INTEGER_VALUE_MESSAGE')); } $this->root_category = $value; return $this; }
public static function getNestedCategories($root_category = null, $lang_id = false, $published = true, $groups = null, $use_shop_restriction = true, $sql_filter = '', $sql_sort = '', $sql_limit = '') { $db = JFactory::getDBO(); if (isset($root_category) && !JeproshopTools::isInt($root_category)) { die(Tools::displayError()); } if (!JeproshopTools::isBool($published)) { die(Tools::displayError()); } if (isset($groups) && JeproshopGroupModelGroup::isFeaturePublished() && !is_array($groups)) { $groups = (array) $groups; } $cache_id = 'Category::getNestedCategories_' . md5((int) $root_category . (int) $lang_id . '_' . (int) $published . '_' . (int) $published . (isset($groups) && JeproshopGroupModelGroup::isFeaturePublished() ? implode('', $groups) : '')); if (!JeproshopCache::isStored($cache_id)) { $query = "SELECT category.*, category_lang.* FROM " . $db->quoteName('#__jeproshop_category') . " AS category "; $query .= ($use_shop_restriction ? JeproshopShopModelShop::addSqlAssociation('category') : "") . " LEFT JOIN "; $query .= $db->quoteName('#__jeproshop_category_lang') . " AS category_lang ON category." . $db->quoteName('category_id'); $query .= " = category_lang." . $db->quoteName('category_id') . JeproshopShopModelShop::addSqlRestrictionOnLang('category_lang'); $selector = " LEFT JOIN " . $db->quoteName('#__jeproshop_category_group') . " AS category_group ON category."; $selector .= $db->quoteName('category_id') . " = category_group." . $db->quoteName('category_id'); $query .= isset($groups) && JeproshopGroupModelGroup::isFeaturePublished() ? $selector : ""; $selector = " RIGHT JOIN " . $db->quoteName('#__jeproshop_category') . " AS category_2 ON category_2." . $db->quoteName('category_id'); $selector .= " = " . (int) $root_category . " AND category." . $db->quoteName('n_left') . " >= category_2." . $db->quoteName('n_left'); $selector .= " AND category." . $db->quoteName('n_right') . " <= category_2." . $db->quoteName('n_right'); $query .= (isset($root_category) ? $selector : "") . " WHERE 1 " . $sql_filter . ($lang_id ? " AND " . $db->quoteName('lang_id') . " = " . (int) $lang_id : ""); $query .= $published ? " AND category." . $db->quoteName('published') . " = 1" : ""; $query .= isset($groups) && JeproshopGroupModelGroup::isFeaturePublished() ? " AND category_group." . $db->quoteName('group_id') . " IN (" . implode(',', $groups) . ") " : ""; $selector = " GROUP BY category." . $db->quoteName('category_id'); $query .= !$lang_id || isset($groups) && JeproshopGroupModelGroup::isFeaturePublished() ? $selector : ""; $query .= $sql_sort != "" ? $sql_sort : " ORDER BY category." . $db->quoteName('depth_level') . " ASC"; $query .= $sql_sort == "" && $use_shop_restriction ? ", category_shop." . $db->quoteName('position') . " ASC" : ""; $query .= $sql_limit != "" ? $sql_limit : ""; $db->setQuery($query); $result = $db->loadObjectList(); $categories = array(); $buff = array(); if (!isset($root_category)) { $root_category = JeproshopCategoryModelCategory::getRootCategory()->category_id; } foreach ($result as $row) { $current =& $buff[$row->category_id]; $current = $row; if ($row->category_id == $root_category) { $categories[$row->category_id] =& $current; } else { $buff[$row->parent_id]->children[$row->category_id] =& $current; } } JeproshopCache::store($cache_id, $categories); } return JeproshopCache::retrieve($cache_id); }