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);


}
Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top