Index: branches/5.2.x/core/units/categories/categories_event_handler.php =================================================================== diff -u -N -r15314 -r15354 --- branches/5.2.x/core/units/categories/categories_event_handler.php (.../categories_event_handler.php) (revision 15314) +++ branches/5.2.x/core/units/categories/categories_event_handler.php (.../categories_event_handler.php) (revision 15354) @@ -1,6 +1,6 @@ Application->GetSID() . '_' . TABLE_PREFIX . 'Search - search_result LEFT JOIN %1$s ON %1$s.ResourceId = search_result.ResourceId'; + search_result JOIN %1$s ON %1$s.ResourceId = search_result.ResourceId'; $sql = str_replace('FROM %1$s', $search_sql, $object->GetPlainSelectSQL()); $object->SetSelectSQL($sql); $object->addCalculatedField('Relevance', 'search_result.Relevance'); - $object->AddOrderField('search_result.Relevance', 'desc', true); $type_clauses['search']['include'] = '1'; $type_clauses['search']['except'] = '0'; @@ -1460,7 +1459,12 @@ protected function getPerPage(kEvent $event) { if ( !$this->Application->isAdmin ) { + $same_special = $event->getEventParam('same_special'); $event->setEventParam('same_special', true); + + $per_page = parent::getPerPage($event); + + $event->setEventParam('same_special', $same_special); } return parent::getPerPage($event); @@ -1577,6 +1581,51 @@ return true; } + /** + * Set's correct sorting for list based on data provided with event + * + * @param kEvent $event + * @return void + * @access protected + * @see kDBEventHandler::OnListBuild() + */ + protected function SetSorting(kEvent $event) + { + $types = $event->getEventParam('types'); + $types = $types ? explode(',', $types) : Array (); + + if ( in_array('search', $types) ) { + $event->setPseudoClass('_List'); + + $object = $event->getObject(); + /* @var $object kDBList */ + + // 1. no user sorting - sort by relevance + if ( $object->isMainList() ) { + if ( !$this->Application->GetVar('sort_by') ) { + $this->Application->SetVar('sort_by', 'Relevance,desc'); + } + } + else { + $sorting_settings = $this->getListSetting($event, 'Sortings'); + + if ( !trim(getArrayValue($sorting_settings, 'Sort1') . ',' . getArrayValue($sorting_settings, 'Sort1_Dir'), ',') ) { + $event->setEventParam('sort_by', 'Relevance,desc'); + } + } + + // 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 ()); + } + + parent::SetSorting($event); + } + // ============= for cms page processing ======================= /** @@ -2515,7 +2564,6 @@ $this->Application->SetVar('do_not_drop_search_table', true); } - $search_table_exists = $this->Conn->Query('SHOW TABLES LIKE "'.$search_table.'"'); if ($search_table_exists) { $select_intro = 'INSERT INTO '.$search_table.' (Relevance, ItemId, ResourceId, ItemType, EdPick) '; @@ -2526,7 +2574,6 @@ $edpick_clause = $this->Application->getUnitOption($event->Prefix.'.EditorsPick', 'Fields') ? $items_table.'.EditorsPick' : '0'; - $sql = $select_intro.' SELECT '.$relevance_clause.' AS Relevance, '.$items_table.'.'.$this->Application->getUnitOption($event->Prefix, 'IDField').' AS ItemId, '.$items_table.'.ResourceId,