Bonsoir à tous,

j'ai un soucis que je rencontre avec CakePHP, je m'explique dans mon controller, j'ai une fonction "index" qui affiche tout mes produits dans un tableau" et dans ce tableau, j'ai un bouton qui envois l'id de mon produit en GET pour m'afficher sa fiche respective (ma fonction view)

en code ça donne (mon controller)

<?php
class ProductsController extends AppController
{
public $paginate = array(
    'paramType' => 'named'
);
    public function index()
    {
        $produit= $this->Product->Find('all', array('order' => 'Product.id ASC'));
        $number=$this->Product->find('count');
        $this->set(compact('produit'));
    }
    public function view($id=0)
    {
    $produits=$this->Product->Find('all', array('conditions'=> array('Product.id'=>$id)));
    $number=$this->Product->find('count');
    $this->set(compact('produits'));
$this->paginate=array('limit'=>1,'order'=>array('Product.id ASC'));
$this->set('Products', $this->paginate());
}
    }
?>

ma vue "view".ctp

<?php

echo $this->assign('titre' , 'Produits');
foreach ($produits as $key => $value)
{
echo '<h3>'.$value'Product']'name'].'</h3>';
echo '<small>De la marque: <i>'.$value'Category']'name'].'</i></small><br/>';
echo '<br/><p class="text-right"><strong>'.$this->Time->Format($value'Product']'date_sortie'], '%B %e, %Y').'</strong></p><br/>';
echo '<img src="'.$value'Product']'photo'].'"alt="'.$value'Product']'name'].'" class="img-responsive" style="width:400px; border-radius:8px;" title="'.$value'Product']'name']. '""/><br/>';
echo '<blockquote>'.$value'Product']'description'].'</blockquote>';
}
?>
   <div class="pager">
    <?php
        /*echo $this->Paginator->prev('<< ', array('tag'=>'li'), null, array('tag'=>'li','class' => 'disabled'));
        echo $this->Paginator->numbers(array('separator' => ''));
        echo $this->Paginator->next(' >>', array('tag'=>'li'), null, array('tag'=>'li','class' => 'disabled'));*/
        echo $this->Paginator->next();
        echo $this->Paginator->numbers();
        echo $this->Paginator->prev();
    ?>
    </div>

mais avec "ma pagination" actuelle, qui fonctionne pas, ça me fait dans l'url "/products/1/page:3" alors que je voudrais qu'il fasse une pagination qui passe juste au produit suivant donc "/products/2", "/products/3" ect.

hors que c'est pas le cas ... Je débute dans CakePHP donc je vous demandais l'indulgence d'un petit noob tel quel moi x) (j'ai bien lu la doc pour le paginator ect) mais je comprends pas super super ^^

Cordialement,

5 réponses


Si je comprend bien (Pas sur) va voir du côté des routes

bonsoir Matspider,

j'ai déjà jeté un coup d'oeil et j'avais essayé

Router::connect('/products/view/:page', array('controller' => 'products', 'action' => 'view'), array('page' => '[0-9]+'))

mais rien n'y fait :/

Je sait plus comment il s'appelle (Il me semble que c'est dans : Créer un blog avec CakePHP, Grafikart parle du component Paginator, perso je m'en sert rarement donc à chaque fois c'est la doc sous mes yeux h24 ...

Bonjour matspider,

je vais regarder la vidéo même si je crois que dans mon cas il faut faire des manip bien précise et donc pas réalisable de moi même (étant un novice dans le framework).

Merci quand même ;)

Bonjour @whitesmoke,
Pourquoi envoies-tu l'id en GET, pourquoi ne pas le mettre directement en paramètre de ton action. Dans ta view avec la liste des produits:

<?php

echo $this->assign('titre' , 'Produits');

foreach ($produits as $key => $value)
{
echo '<h3>'.$this->Html->link($value'Product']'name'], array('controller' => 'Products', 'action' => 'detail', $value'Product']'id'])).'</h3>';
...etc..
}
?>

Et dans ton controller:

function detail($id){
if(!empty($id)){
//Récupération de ton produit
$produit = $this->Product->findbyId($id);
..etc..
}
}

Par contre, je ne suis pas d'accord avec toi sur le fait que tu fasse un paginate d'un seul item. Le paginate s'utilise pour lister plusieurs item.

En espérant t'avoir aidé ;)