CakePHP: paginazione con condizioni su campi tradotti

ATTENZIONE! Il post ha più di 2 anni e le informazioni contenute potrebbero essere obsolete (ad esempio a causa di un aggiornamento di versione rispetto agli elementi descritti o links modificati da siti esterni).

Per eseguire la paginazione in CakePHP utilizzando delle condizioni sui campi tradotti (Translate Behavior) è necessario aggiungere alcune funzioni nell'app_model (testato nella versione 1.3):

var $usePaginateMethod = 'standard';
function setPaginate($method=''){
    if (empty($method)){
        $this->usePaginateMethod = 'standard';
    }else{
        $this->usePaginateMethod = $method;
    }
}

function paginateCount($conditions, $recursive, $extra){
    switch ($this->usePaginateMethod) {
        case 'standard':
            return $this->standardPaginateCount($conditions, $recursive, $extra);
        break;

        case 'custom':
        return $this->customPaginateCount($conditions, $recursive, $extra);
        break;
    }
}

function standardPaginateCount($conditions, $recursive, $extra){
    $results = $this->find('count', compact('conditions', 'recursive', 'extra'));
    return $results;
}

function customPaginateCount($conditions, $recursive, $extra){
    $results = $this->find('all', compact('conditions', 'recursive', 'extra'));
    $count = count($results);
    return $count;
}

All'interno del controller si deve poi impostare il metodo di paginazione scegliendo tra 'custom' e 'standard'


//specifica il tipo di paginazione da utilizzare
$this->News->setPaginate('custom');
$this->data = $this->paginate('News',$conditions = array());

Per ritornare alla paginazione standard:


//se necessario ritorna al metodo standard
$this->News->setPaginate('standard');

fonte: http://groups.google.com

Condividi questo post


Commenti