Привет всем!
Кто нибудь пробовал реализовать натуральную сортировку таблицы Views при помощи модуля Views Natural Sort?
Задача, чтобы элементы: ст10, ст100, ст20, ст21, ст250, сортировались правильно: ст10, ст20, ст21, ст100, ст250.
Может быть есть другие идеи?
Комментарии
Получилось только при помощи JavaScript.
можешь решение сказать....
* Implementation of hook_views_query_alter
* @param type $view
* @param type $query
*/
function MYMODULE_views_query_alter(&$view, &$query) {
if('check appropriate condition'){
//remove all the sort order fields.
$query->orderby = array();
// Add sort criteria which will ignore the 'a', 'an' and 'the' show number before the alphabets in titles. Here sort critaria order is important don't change the order.
//use CASE with regular express to check starting of title with 'a', 'an' and 'the' followed by space
$query->orderby['0']['field'] = "
CASE
WHEN field_data_field_display_title_field_display_title_value REGEXP '^(A|An|The)[[:space:]]' = 1 THEN
TRIM(SUBSTR(field_data_field_display_title_field_display_title_value , INSTR(field_data_field_display_title_field_display_title_value ,' ')))
ELSE field_data_field_display_title_field_display_title_value
END";
$query->orderby['0']['direction'] = 'ASC';
// this is trick which add 0 to the field to cast it to number then check the condition
$query->orderby['1']['field'] = 'field_data_field_display_title_field_display_title_value+0<>0';
$query->orderby['1']['direction'] = 'DESC';
$query->orderby['2']['field'] = 'field_data_field_display_title_field_display_title_value';
$query->orderby['2']['direction'] = 'ASC';
}
}