Bonjour,

Pour avoir mon menu A-Z ( quand je clique sur une lettre, ça me renvoie à une liste des acteurs dont le nom commence par cette lettre) j'ai créé une méthode display(),celle si récupère une méthode de mon modèle qui compare la première lettre du nom de l'acteur avec la lettre de mon menu

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire
dans mon controller

    public function display($lettre){
        $res_lettres = $this->Personne->trieParLettre($lettre);
        $this->set('p',$res_lettres);
    }

dans mon model

  public function trieParLettre($lettre){
    return $this->find('all', array(
        'conditions' => array('Personne.nom LIKE' => "$lettre%"),
        'order' => array('Personne.nom ASC')
    ));

Ce que je veux

mettre dans display($lettre) , le paginate avec dans le paramètre $res_lettres (qui retourne un tableau)

8 réponses


bobazaza
Auteur
Réponse acceptée

c'est bon j'ai trouvé =)

Bonjour.
Je n'ai pas l'impression que tu aies bien consulté la documentation concernant le composant Paginator.

bobazaza
Auteur

je sais qu'il faut mettre forcément un model mais on m'a dit que l'on pouvait mettre en parametrage un array dans le paginate =)

Ce que je veux dire, c'est qu'il te faut changer ton système, tu crées un finder personnalisé et non une fonction comme tu l'as fait et tu pourras définir au composant Paginator que tu veux utiliser ce finder.
Par exemple :

/* Dans ton modèle */
protected function _findParLettre($query) 
{
    $query['order']['Personne.nom'] = 'ASC';
    return $query;
}

/* Dans la fonction de ton controller */
$this->Paginator->settings = [
    'findType' => 'par_lettre', 
    'conditions' => ['Personne.nom LIKE' => $lettre . '%']
];
$res_lettres = $this->Paginator->Paginate('Personne');
$this->set('p', $res_lettre);
bobazaza
Auteur

D'accord et 'findType' => 'par_lettre' c'est l'appelle de la methode _findParLettre() ? =)

bobazaza
Auteur

J'ai fait :

    public function display($lettre){
        //$res_lettres = $this->Personne->trieParLettre($lettre);
        //$this->set('p',$res_lettres);
        $paginate = array('findType' =>'parLettre','conditions' => ['Personne.nom LIKE' => '%'.$lettre . '%']);
        $this->Paginator->paginate('Personne');
        $this->set('p', $paginate);
        debug($paginate);
      }

ma vue

<div class="row">
  <?php foreach($p as $pers): ?>
      <div class="col-sm-6 col-md-3" >
        <div class="thumbnail">
              <center><?php echo  $this->Html->image($pers['Personne']['photo'],array('class' => 'imageActeur'));?></center>
          <div class="caption">
            <h3>
              <div class="nomActeurListe">
                <?php echo ucfirst($pers['Personne']['prenom'])." ".ucfirst( $pers['Personne']['nom']); ?>
              </div>
            </h3>
            <div class="boutonListe">
              <button class="btn btn-primary" role="button">
                    <?php echo $this->Html->link('Visiter',array('controller' => 'personnes', 'action' => 'view', $pers['Personne']['id']),array('class'=>'bouton')); ?>
                </button>
                <button class="btn btn-primary" role="button">
                        <?php echo $this->Html->link('Modifier',array('action' => 'modif', $pers['Personne']['id'] ),array('class'=>'bouton')); ?>
                </button>
            </div>
            </p>
          </div>
        </div>
      </div>
  <?php endforeach;?>
    </div>
et je n'arrive plus à récupérer un tableau avec mes données de la personne  =/

C'est normal, ton tableau de la variable $paginate n'est pas passé dans les settings du composant Paginator, en plus de ça, il n'est pas utilisé dans ta vue.
Tout ce que vaut ta variable $p qui est envoyé à la vue actuellement, c'est uniquement le contenu de ta variable $paginate, soit le tableau : array('findType' =>'parLettre','conditions' => ['Personne.nom LIKE' => '%'.$lettre . '%']).

bobazaza
Auteur

le probleme c'est que si je fait ça

$this->Paginator->settings = array('findType' =>'parLettre','conditions' => ['Personne.nom LIKE' => $lettre . '%']);
        $paginate = $this->Paginator->paginate('Personne');
        $this->set('p', $paginate);

ça me renvoie à null =/