2015-03-27 2 views
0

J'ai essayé de créer une pagination sur mon site Web à l'aide de l'ensemble KnpPaginator. Dans mon dépôt Je crée une requête:Créer un paginate à l'aide de KnpPaginator

public function getProductsOrderByDateDesc($id_category = null, $max = null){ 
    $qb = $this->createQueryBuilder('p') 
     ->orderBy('p.created_at', 'DESC'); 

    if($max) { 
     $qb->setMaxResults($max); 
    } 
    if($id_category) { 
     if(is_array($id_category)){ 
      $aIdCategory = implode("','",$id_category); 
      $qb->andWhere('p.category IN (:ids)') 
       ->setParameter('ids', $aIdCategory); 
     }else{ 
      $qb->andWhere('p.category = :category_id') 
       ->setParameter('category_id', $id_category); 
     } 
    } 
    $query = $qb->getQuery(); 
    return $query->getArrayResult(); 
} 

Dans mon contrôleur je fais:

$repositoryProduct = $em->getRepository('ShopDesktopBundle:Product'); 
    $aProducts   = array(); 
    $aProducts   = $repositoryProduct->getProductsOrderByDateDesc($id); 
    $paginator = $this->get('knp_paginator'); 
    $pagination = $paginator->paginate(
     $aProducts, 
     $this->get('request')->query->get('page', 1), 
     3 
    ); 
    return $this->render('ShopDesktopBundle:Category:category.html.twig',array(
     'aProducts'   => $aProducts, 
     'pagination'  => $pagination 
    )); 

Etant donné que je montre que cette Pagination:

<div class="navigation"> 
    {{ knp_pagination_render(pagination) }} 
</div> 

Le problème est que toujours affiche tous les produits non seulement la limite qui pour mon exemple est 3. Par exemple: J'ai 9 produits, limite = 3, la pagination est correcte "1 2 3 "mais pour chaque page je vois tous les 9 produits Aidez-moi s'il vous plaît! Thx à l'avance

Répondre

0

Presque correct, mais vous devez utiliser l'objet de pagination au lieu de 'aProducts'. Selon vous, utilisez le code suivant:

{% for product in pagination %} 
<tr {% if loop.index is odd %}class="color"{% endif %}> 
    <td>{{ product.id }}</td> 
    <td>{{ product.title }}</td> 
</tr> 
{% endfor %} 

Voir plus d'informations dans la documentation, sous la rubrique 'View': https://github.com/KnpLabs/KnpPaginatorBundle

+0

maintenant à Pagination travail doen't. Toujours rester sur la page = 1 – TanGio

+0

Veuillez lire attentivement la documentation, il y a un exemple complet sous 'Controller' qui indique que vous devez utiliser l'objet Request pour que la pagination fonctionne: '$ request-> query-> get ('page' , 1) ' – Richard