pagination Cakephp com ordem aleatória?
-
27-10-2019 - |
Pergunta
Ok, eu olhei e olhou, mas não consigo encontrar nada sobre isso em qualquer lugar. Eu tenho uma exibição de resultados que é paginado lindamente, mas que atualmente exibidos em ordem ascendente. Eu gostaria que eles sejam exibidos em ordem aleatória. Aqui está o meu código de controlador de corrente:
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);
}
Solução
Para qualquer outra pessoa encontrar este - a resposta real é para gerar uma semente (uma bóia entre 0 e 1), e guardá-lo para a sessão antes do RAND()
tipo é necessário (em beforeFilter()
do controlador). Então:
$this->paginate['order'] = sprintf('RAND(%f), $this->Session->read('seed'));
Isso preserva a semente RAND()
entre chamadas para o paginador, e preserva a ordem global dos resultados entre as solicitações.
Outras dicas
Este parece funcionar muito bem no CakePHP 2 para mim:
$this->paginate = array(
'order' => 'RAND()'
);
Isso é usar a função MySQL RAND()
, que bolo apenas passa para o banco de dados.
EDIT: Agora que penso nisso, isso não é uma boa idéia, porque a ordem não é mantida entre as páginas. Eu não consigo pensar em uma boa maneira fora do topo da minha cabeça para embaralhar a ordem e manter a continuidade entre as páginas. Talvez se você fosse para baralhar os itens da página com JavaScript?