Index: branches/5.1.x/core/kernel/db/cat_tag_processor.php =================================================================== diff -u -N -r13789 -r13936 --- branches/5.1.x/core/kernel/db/cat_tag_processor.php (.../cat_tag_processor.php) (revision 13789) +++ branches/5.1.x/core/kernel/db/cat_tag_processor.php (.../cat_tag_processor.php) (revision 13936) @@ -1,6 +1,6 @@ GetList($params); $user_sorting_start = $this->getUserSortIndex(); - - $sorting_field = $list->GetOrderField($user_sorting_start); - $sorting = strtolower($sorting_field . '|' . $list->GetOrderDirection($user_sorting_start)); - + + list ($sorting_field, $sorting_direction) = explode('|', $params['sorting']); + $sorting_field = preg_replace('/^l[\d]+_(.*)/', '\\1', $sorting_field); // remove language prefix (if any) $field_options = $list->GetFieldOptions($sorting_field); + if (array_key_exists('formatter', $field_options) && $field_options['formatter'] == 'kMultiLanguage') { - // remove language prefix - $sorting = preg_replace('/^l[\d]+_(.*)/', '\\1', $sorting); - $params['sorting'] = preg_replace('/^l[\d]+_(.*)/', '\\1', $params['sorting']); + // remove language prefix for $sorting_field + $params['sorting'] = $list->getMLSortField($sorting_field) . '|' . $sorting_direction; } - - return $sorting == strtolower($params['sorting']) ? $params['selected'] : ''; + + $current_sorting = $list->GetOrderField($user_sorting_start) . '|' . $list->GetOrderDirection($user_sorting_start); + + return strtolower($current_sorting) == strtolower($params['sorting']) ? $params['selected'] : ''; } function CombinedSortingDropDownName($params) Index: branches/5.1.x/core/kernel/db/dblist.php =================================================================== diff -u -N -r13885 -r13936 --- branches/5.1.x/core/kernel/db/dblist.php (.../dblist.php) (revision 13885) +++ branches/5.1.x/core/kernel/db/dblist.php (.../dblist.php) (revision 13936) @@ -1,6 +1,6 @@ Fields[$field]['formatter']) ? $this->Fields[$field]['formatter'] : false; + if ($formatter == 'kMultiLanguage' && !isset($this->Fields[$field]['master_field'])) { - $lang = $this->Application->GetVar('m_lang'); - $field = 'l'.$lang.'_'.$field; + // for now kMultiLanguage formatter is only supported for real (non-virtual) fields + $is_expression = true; + $field = $this->getMLSortField($field); } if (!isset($this->Fields[$field]) && $field != 'RAND()' && !$is_expression) { @@ -715,6 +717,23 @@ } /** + * Returns expression, used to sort given multilingual field + * + * @param string $field + * @return string + */ + function getMLSortField($field) + { + $table_name = '`' . $this->TableName . '`'; + $lang = $this->Application->GetVar('m_lang'); + $primary_lang = $this->Application->GetDefaultLanguageId(); + + $ret = 'IF(COALESCE(%1$s.l' . $lang . '_' . $field . ', ""), %1$s.l' . $lang . '_' . $field . ', %1$s.l' . $primary_lang . '_' . $field . ')'; + + return sprintf($ret, $table_name); + } + + /** * Removes all order fields * * @access public