[РЕШЕНО] Натуральная сортировка

Главные вкладки

Аватар пользователя Valery.O Valery.O 6 декабря 2012 в 9:41

Привет всем!
Кто нибудь пробовал реализовать натуральную сортировку таблицы Views при помощи модуля Views Natural Sort?

Задача, чтобы элементы: ст10, ст100, ст20, ст21, ст250, сортировались правильно: ст10, ст20, ст21, ст100, ст250.

Может быть есть другие идеи?

Комментарии

Аватар пользователя dashiwa dashiwa 18 ноября 2014 в 16:45
    /**
     * 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';
    }
    }