I am designing and ecommerce store and I am trying to sort the products by availability using a hook_view. My function product_eta_seconds return the current eta of a product. Here is my module:
function availability_sort_views_pre_render(&$view) {
if ('uc_products' == $view->name && 'page_1' == $view->current_display) {
$view->result = array_reverse($view->result);
$deliveryTime=array();
foreach ($view->result as $viewRow){
$deliveryTime[] = product_eta_seconds($viewRow->nid);
}
asort($deliveryTime);
$view->result = sortArrayByArray($view->result,$deliveryTime);
}
}
function sortArrayByArray($array,$orderArray) {
$ordered = array();
foreach($orderArray as $key=>$value) {
if(array_key_exists($key,$array)) {
$ordered[$key] = $array[$key];
unset($array[$key]);
}
}
return $ordered + $array;
}
The problem is the view->result returns only 9 items (my pager value) so when I look at page 2, there are results that should show up on the 1st page (with a lower eta). Is there a solution to get all items of the view without the pager and apply the pager, when the view is rendered ? Any other solution would suit though.