Пример #1
0
 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;
 }
Пример #2
0
 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);
 }