Index: branches/5.2.x/core/units/categories/categories_event_handler.php =================================================================== diff -u -N -r15421 -r15427 --- branches/5.2.x/core/units/categories/categories_event_handler.php (.../categories_event_handler.php) (revision 15421) +++ branches/5.2.x/core/units/categories/categories_event_handler.php (.../categories_event_handler.php) (revision 15427) @@ -1,6 +1,6 @@ isMainList() ) { - if ( !$this->Application->GetVar('sort_by') ) { - $this->Application->SetVar('sort_by', 'Relevance,desc'); + $sort_by = $this->Application->GetVar('sort_by', ''); + + if ( !$sort_by ) { + $this->Application->SetVar('sort_by', 'Relevance,desc|' . $default_sorting); } + elseif ( strpos($sort_by, 'Relevance,') !== false ) { + $this->Application->SetVar('sort_by', $sort_by . '|' . $default_sorting); + } } else { $sorting_settings = $this->getListSetting($event, 'Sortings'); + $sort_by = trim(getArrayValue($sorting_settings, 'Sort1') . ',' . getArrayValue($sorting_settings, 'Sort1_Dir'), ','); - if ( !trim(getArrayValue($sorting_settings, 'Sort1') . ',' . getArrayValue($sorting_settings, 'Sort1_Dir'), ',') ) { - $event->setEventParam('sort_by', 'Relevance,desc'); + if ( !$sort_by ) { + $event->setEventParam('sort_by', 'Relevance,desc|' . $default_sorting); } + elseif ( strpos($sort_by, 'Relevance,') !== false ) { + $event->setEventParam('sort_by', $sort_by . '|' . $default_sorting); + } } - // 2. remove default sortings - $config_mapping = $this->Application->getUnitOption($event->Prefix, 'ConfigMapping'); - unset($config_mapping['DefaultSorting1Field']); - $this->Application->setUnitOption($event->Prefix, 'ConfigMapping', $config_mapping); - - // 2. remove forced sortings - $this->Application->setUnitOption($event->Prefix, 'ListSortings', Array ()); + $this->_removeForcedSortings($event); } parent::SetSorting($event); } + /** + * Removes forced sortings + * + * @param kEvent $event + */ + protected function _removeForcedSortings(kEvent $event) + { + $list_sortings = $this->Application->getUnitOption($event->Prefix, 'ListSortings', Array ()); + /* @var $list_sortings Array */ + + foreach ($list_sortings as $special => $sortings) { + unset($list_sortings[$special]['ForcedSorting']); + } + + $this->Application->setUnitOption($event->Prefix, 'ListSortings', $list_sortings); + } + + /** + * Default sorting in search results only comes from relevance field + * + * @param kEvent $event + * @return Array + * @access protected + */ + protected function _getDefaultSorting(kEvent $event) + { + $types = $event->getEventParam('types'); + $types = $types ? explode(',', $types) : Array (); + + return in_array('search', $types) ? Array () : parent::_getDefaultSorting($event); + } + // ============= for cms page processing ======================= /**