Pregunta

Ok, he buscado y buscado, pero parece que no puedo encontrar nada sobre esto en ninguna parte.Tengo una visualización de resultados que están muy bien paginados, pero actualmente se muestran en orden ascendente.Me gustaría que se mostraran en orden aleatorio.Aquí está mi código de controlador actual:

public function condos() {          

$this->paginate['Unit']=array(
        'limit'=>9,
        'contain'=>array(
                'User'=>array(
                    'id', 'user_name', 'area_code', 'exchange', 'sln', 'email'),
                'Complex'=>array('id','complex_name', 'realname', 'photo1','photo2','photo3','photo4','photo5', 'complex_website')
                    ),
        'conditions'=>array(
                'Unit.type'=>array('condo', 'rentalco'),
                'Unit.active'=>1)   
    );
$data = $this->paginate('Unit');
$this->set('allcondos', $data);


}
¿Fue útil?

Solución

Para cualquier otra persona que encuentre esto, la respuesta real es generar una semilla (un flotante entre 0 y 1) y guardarla en la sesión antes de que sea necesaria la clasificación RAND() (en el beforeFilter() del controlador).Entonces:

$this->paginate['order'] = sprintf('RAND(%f), $this->Session->read('seed'));

Esto preserva la semilla RAND() entre llamadas al paginador y preserva el orden general de los resultados entre solicitudes.

Otros consejos

Esto parece funcionar bastante bien en CakePHP 2 para mí:

$this->paginate = array(
    'order' => 'RAND()'
);

Esto está usando la función RAND() de MySQL, que Cake simplemente pasa a la base de datos.

EDITAR: Ahora que lo pienso, esta no es una buena idea, porque el orden no se mantiene entre páginas.No puedo pensar en una buena forma de pensar en aleatorizar el orden y mantener la continuidad entre las páginas.¿Quizás si tuvieras que mezclar los elementos de la página con JavaScript?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top