There are 2 ways to implement server-side sorting:
APPLICABLE TO: Grid, TreeGrid, Tree, Combo, Scheduler, DataView, Chart, Form, DataStore, DHTMXL Touch components,
You can control how data will be sorted inside column by specifying additional parameters in URL.
//ORDER by field_2 ASC grid.load("some.php?connector=true&dhx_sort[2]=asc"); //ORDER by field_2 ASC, field_3 DESC grid.load("some.php?connector=true&dhx_sort[2]=asc&dhx_sort[3]=desc");
APPLICABLE TO: Grid, TreeGrid
To sort grid/treegrid content with connectors you need to use 'connector' as sorting type while grid initialization.
grid.setColSorting("connector,str,na);
In the code snippet above, the first column will be sorted on server-side with connectors, the second as string on client-side, the third column won't be sortable.
By assigning to sorting type 'connector' you just 'say' that sorting will be implemented on server-side.
To define the way, 'behaviour' of sorting you should use beforeSort event.
Event doesn't allow to write custom sorting logic, but you can affect SORT BY clause of generated SQL request.
function custom_sort($sorted_by){ //SORT BY some_field ASC if (!sizeof($sorted_by->rules)) $sorted_by->add("some_field","ASC"); } $conn->event->attach("beforeSort","custom_sort");
function custom_sort($sorted_by){ //SORT BY some_field ASC, some_other ASC if (!sizeof($sorted_by->rules)){ $sorted_by->add("some_field","ASC"); $sorted_by->add("some_other","ASC"); } } $conn->event->attach("beforeSort","custom_sort");
function custom_sort($sorted_by){ // SORT BY LENGTH(some_field) $sorted_by->rules[0]["name"]="LENGTH(some_field)"; } $conn->event->attach("beforeSort","custom_sort");