Domanda

Ok, ho cercato e cercato ma non riesco a trovare nulla su questo da nessuna parte.Ho una visualizzazione dei risultati che sono impaginati magnificamente, ma attualmente vengono visualizzati in ordine crescente.Vorrei che fossero visualizzati in ordine casuale.Ecco il codice del mio controller attuale:

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


}
È stato utile?

Soluzione

Per chiunque altro trovi questo - la risposta effettiva è generare un seed (un float tra 0 e 1) e salvarlo nella sessione prima che sia necessario l'ordinamento RAND() (nel beforeFilter() del controller).Quindi:

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

Questo preserva il seme RAND() tra le chiamate al paginator e preserva l'ordine generale dei risultati tra le richieste.

Altri suggerimenti

Questo sembra funzionare abbastanza bene su CakePHP 2 per me:

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

Questo utilizza la funzione RAND() di MySQL, che Cake trasmette al database.

EDIT: Ora che ci penso, questa non è una buona idea, perché l'ordine non viene mantenuto tra le pagine.Non riesco a pensare a una buona via dalla cima della mia testa per randomizzare l'ordine e mantenere la continuità tra le pagine.Forse se dovessi mescolare gli elementi sulla pagina con JavaScript?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top