método rs_ordenar_por_columna

Estimados amigos.
Tuve la necesidad de que un rs cargado mediante una relación sea ordenado a pedido del usuario en forma ascendente o descendente.

Encontré el método “rs_ordenar_por_columna”, pero este solo ordena en forma ascendente ya que uno de sus parámetros ($tipo), precisamente el que indica el sentido del orden se define como constante el la lista de los recibidos por la función.

Lo que hice, para no modificar los archivos de Toba, fue copiarla y haerle una pequeñisima modificación.

Se las mando, junto con el método que la usa, para que la consideren en futuras versiones ya que para mi al menos, es útil.


function ordenar_por_columna($rs, $columna, $tipo)
{
	if ($tipo=='desc'):
		$tipo = SORT_DESC;
	else:
		$tipo = SORT_ASC;
	endif;	
	
	$rs_columna = array();
	foreach ($rs as $registro) {
		$rs_columna[] = $registro[$columna];
	}
	array_multisort($rs_columna, $tipo, $rs);
	return $rs;
}

#------
function conf__cd_novedades($cuadro)
{
	//rs_ordenar_por_columna ($this->get_relacion()->tabla('novedades')->get_filas(), 'p09corr'); 
	  $cuadro->set_datos($this->ordenar_por_columna($this->get_relacion()->tabla('novedades')->get_filas(), 'p09corr','desc'));
}

No es gran cosa, pero… :slight_smile:
Un cordial saludo.

Hola Claudio,

En realidad no es que $tipo este definido como constante… esa es la forma estandar de php para indicar un valor por defecto ante la ausencia del parametro actual, en este caso el valor predefinido es una constante… pero bien podria haber sido 4, 9 , ‘pepito salio a comer’, array(), etc. En tu caso lo que deberias hacer para realizar ordenar en el sentido correspondiente es simplemente pasarle al metodo una de las dos constantes como tercer parametro, de esa forma se anula el valor por defecto y se toma el que llega por parametro.

De todas maneras me parece excelente que te hayas tomado la molestia de cambiar la funcion y compartirla con nosotros, de verdad Gracias.

Saludos
Richard

Gracias por tu comentario Richard.

De verdad te digo que fui víctima de mi ignorancia; no sabía que pasándole un valor anulaba la constante que tiene en la cabecera de la función. Pensé que se anulaba lo que yo le enviara.

Pido disculpas por la molestia.

Un cordial saludo