Index: trunk/kernel/units/categories/categories_tag_processor.php =================================================================== diff -u -N -r2190 -r2586 --- trunk/kernel/units/categories/categories_tag_processor.php (.../categories_tag_processor.php) (revision 2190) +++ trunk/kernel/units/categories/categories_tag_processor.php (.../categories_tag_processor.php) (revision 2586) @@ -4,23 +4,11 @@ function &GetList($params) { - if ( isset($params['parent_cat_id']) ) { - $parent_cat_id = $params['parent_cat_id']; - } - else { - $parent_cat_id = $this->Application->GetVar($this->Prefix.'_id'); - if (!$parent_cat_id) { - $parent_cat_id = $this->Application->GetVar('m_cat_id'); - } - if (!$parent_cat_id) { - $parent_cat_id = 0; - } - } + $special = $this->BuildListSpecial($params); - $prefix_special = $this->Prefix.'.-'.$parent_cat_id; + $prefix_special = $this->Prefix.'.'.$special; + $this->Special = $special; - $this->Special = '-'.$parent_cat_id; - $params['skip_counting'] = true; $list =& $this->Application->recallObject( $prefix_special, $this->Prefix.'_List',$params); @@ -259,6 +247,32 @@ return $this->Application->ConfigValue($conf); } + + function BuildListSpecial($params) + { + if ( isset($params['parent_cat_id']) ) { + $parent_cat_id = $params['parent_cat_id']; + } + else { + $parent_cat_id = $this->Application->GetVar($this->Prefix.'_id'); + if (!$parent_cat_id) { + $parent_cat_id = $this->Application->GetVar('m_cat_id'); + } + if (!$parent_cat_id) { + $parent_cat_id = 0; + } + } + + $types = $this->SelectParam($params, 'types'); + $except = $this->SelectParam($params, 'except'); + + if ($types.$except.$parent_cat_id == '') { + return parent::BuildListSpecial($params); + } + + $special = crc32($types.$except.$parent_cat_id); + return $special; + } }