Index: branches/5.1.x/core/kernel/db/dblist.php =================================================================== diff -u -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