El módulo vistas provides some hooks de manipulaciones externas '', al igual que el núcleo de Drupal.
Puede implementar hook_views_pre_render(&$view)
dentro de un módulo personalizado y manipular la matriz de resultados estén disponibles en $view->result
:
/**
* Implementation of hook_views_pre_render()
*
* @param view $view
*/
function YourModuleName_views_pre_render(&$view) {
// Check if this is the view and display you want to manipulate
// NOTE: Adjust/Remove the display check, if you want to manipulate some/all displays of the view
if ('YourViewName' == $view->name && 'YourDisplayName' == $view->current_display) {
// EXAMPLE: Just reverse result order
// TODO: Replace with your desired (re)ordering logic
$view->result = array_reverse($view->result);
}
}
El gancho es invocada en la mitad del proceso de generación de vistas, después de todo, los datos de resultado ha sido montado, pero antes de que se muestre la salida real, los cambios en la matriz de resultados se reflejarán en el resultado final de las vistas.
EDIT: Como alternativa, puede procesar la vista 'manualmente', copiando el comportamiento de la función views_get_view_result()
, pero en lugar de devolver el resultado, manipularlo y seguir prestando la vista:
function yourModule_get_custom_sorted_view($display_id = NULL) {
// As the custom sorting probably only works for a specific view,
// we 'demote' the former $name function parameter of 'views_get_view_result()'
// and set it within the function:
$name = 'yourViewName';
// Prepare a default output in case the view definition can not be found
// TODO: Decide what to return in that case (using empty string for now)
$output = '';
// Then we create the result just as 'views_get_view_result()' would do it:
$args = func_get_args();
if (count($args)) {
array_shift($args); // remove $display_id
}
$view = views_get_view($name);
if (is_object($view)) {
if (is_array($args)) {
$view->set_arguments($args);
}
if (is_string($display_id)) {
$view->set_display($display_id);
}
else {
$view->init_display();
}
$view->pre_execute();
$view->execute();
// 'views_get_view_result()' would just return $view->result here,
// but we need to go on, reordering the result:
$important_var = important_function();
$view->result = sorting_function($result, $important_var);
// Now we continue the view processing and generate the rendered output
// NOTE: $view->render will call $view->execute again,
// but the execute method will detect that it ran already and not redo it.
$output = $view->render();
// Clean up after processing
$view->post_execute();
}
return $output;
}
Nota: Esto es una gran cantidad de código duplicado y, por lo tanto, propenso a errores: no lo recomiendo y prefiera ir con la implementación de gancho anterior, tratando de encontrar una manera de acceder a su $ important_var desde dentro .
¿Puede editar la consulta SQL que genera la interfaz Views para hacer la clasificación en la consulta? – alxp
No, la clasificación depende de algunas variables que no están disponibles en ese contexto. – Ace