2010-10-18 3 views
1

J'ai réussi à l'emporter sur les méthodes par défaut pour une requête personnalisée dans mon modèle comme suggéré ailleurs,CakePHP 1.3 paginate avec requête personnalisée

function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) 

et

function paginateCount($conditions = null, $recursive = 0, $extra = array()) 

Malheureusement, cette approche plus -rides tous pagination pour ce modèle, et affecte l'autre pagination ailleurs. J'ai trouvé du code qui pourrait m'aider à choisir si je voulais que la pagination personnalisée soit basée sur une variable, par ex.

Dans mon modèle

var $useCustom = false; 

function paginateCount($conditions = null, $recursive = 0, $extra = array()) 
{ 
if(!$this->useCustom) 
    return parent::paginateCount($conditions, $recursive); 

// code to handle custom paginate count here 
} 

J'ai trouvé que cette méthode me donne une erreur,

Fatal error: Call to undefined method AppModel::paginateCount() in....

Qu'est-ce que je fais mal? Je suppose que j'aurais aussi besoin d'un code similaire dans la fonction paginate? Suis-je aussi raison de penser que je peux définir cette variable dans mon contrôleur à savoir $this->useCustom = 'true';

Répondre

1

Après un peu de plonger dans le code que je trouve que les méthodes de paginateCount et paginera n'existent pas dans le modèle, ou nulle part ailleurs pour cette matière, ce qui est la raison pour laquelle je ne pouvais pas les appeler. la solution est de copier le code du contrôleur principal, qui vérifie l'existence du surpassement

pour ceux qui souhaitent une solution similaire utiliser ce qui suit dans paginateCount

if(!$this->useCustom) 
{ 
    $parameters = compact('conditions'); 
    if ($recursive != $this->recursive) { 
     $parameters['recursive'] = $recursive; 
    } 
    $count = $this->find('count', array_merge($parameters, $extra)); 

    return $count; 

} else { 

custom method... 

} 

et paginate utilisation

if(!$this->useCustom) 
{ 
    $parameters = compact('conditions', 'fields', 'order', 'limit', 'page'); 
    if ($recursive != $this->recursive) { 
     $parameters['recursive'] = $recursive; 
    } 
    $results = $this->find('all', array_merge($parameters, $extra)); 
    return $results; 

} else { 

custom method... 

} 

Hope this helps quelqu'un d'autre.

0

Je pense que vous avez besoin du mot-clé public avant votre fonction d'utiliser l'opérateur de résolution de portée de cette façon.

fonction publique c.-à- paginateCount (....

+0

Merci, mais cela n'a pas fonctionné, s'il vous plaît voir ma solution – Dave