2017-09-14 2 views
0

Ich habe ein Problem, das meine Sortierung mit KnpPaginator funktioniert. Ich bin vielen Links gefolgt und habe viele Wiederholungen in meinem Code versucht, es scheint nicht richtig zu funktionieren. Ich vermisse etwas, aber kann es nicht finden Das einzige, was im Moment funktioniert, sind die Tabellenüberschriften, wo ich darauf klicken kann, aber nichts passiert, außer die Seite zu aktualisieren und mich wieder auf Seitenumbruch 1. Ich arbeite auf symfony 2.3Sortierung mit KnpPaginator

hier ist mein Bündel Konfiguration

knp_paginator: 
page_range: 5      # default page range used in pagination control 
default_options: 
    page_name: page    # page query parameter name 
    sort_field_name: sort   # sort field query parameter name 
    sort_direction_name: direction # sort direction query parameter name 
    distinct: true     # ensure distinct results, useful when ORM queries are using GROUP BY statements 
template: 
    pagination: 'KnpPaginatorBundle:Pagination:twitter_bootstrap_v3_pagination.html.twig'  # sliding pagination controls template 
    sortable: 'KnpPaginatorBundle:Pagination:sortable_link.html.twig' # sort link template 

hier mein Controller ist, wo ich Knp tatsächlich mit dem getRepository

private function resultsAction(Request $request, User $user, $type, $archive) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $query = $em->getRepository("STUserBundle:Operation")->getQueryByTypeAndPro($type, $user, $archive); 

    $paginator = $this->get('knp_paginator'); 
    $results = $paginator->paginate(
     $query, 
     $request->query->getInt('page',1), 
     $request->query->getInt('limit',50) 
    ); 

    return array("results" => $results, "archive" => $archive); 
} 

public function offreAction(Request $request, User $user, $archive = false) 
    { 
     return $this->resultsAction($request, $user, Operation::OFFRE_COMMERCIALE, $archive); 
    } 

hier ist meine Repo, wo die Abfrage gemacht setted ist:

public function getQueryByTypeAndPro($type, User $user, $archive) 
    { 
     return $this->createQueryBuilder("opn") 
      ->andWhere("opn.type = :type") 
      ->setParameter("type", $type) 
      ->andWhere("opn.resellerId = :reseller") 
      ->setParameter("reseller", $user->getId()) 
      ->andWhere("opn.archive = :archive") 
      ->setParameter('archive', $archive) 
      ->orderBy("opn.dateCreation", "DESC") 
      ->getQuery() 
     ; 
    } 

Und hier ist meiner Meinung nach, wo ich versuche, die Dinge funktionieren mit Knp

<tr> 
     <th>{{ knp_pagination_sortable(results, 'general.vehicule.ref'|trans, 'opn.type') }}</th> 
     <th>{{ knp_pagination_sortable(results, 'general.vehicule.vehicule'|trans, 'opn.resellerId') }}</th> 
     <th>{{ knp_pagination_sortable(results, 'notifications.client'|trans, 'opn.??') }}</th> 
     <th>{{ knp_pagination_sortable(results, 'general.date'|trans, 'opn.??') }}</th> 
     <th>{{ knp_pagination_sortable(results, 'commerce.achat.encours.etat'|trans, 'opn.??') }}</th> 
    </tr> 

Und in meinem Tisch, wenn ich darauf klicke aktualisieren Sie die Seite aber nicht sortieren. Es fällt mir schwer zu verstehen, wie ich diese Arbeit machen kann?

Ort, wo ich 'opn.??' geputtet sein, weil ich nicht weiß, was an dieser bestimmten Stelle zu setzen, ich scheine nicht die Abfrage

zu verstehen, ich der letzte datierte Artikel möchte die ersten sein, aber in der Lage sein, es mit Knp

Antwort

1

Okay, ich habe es geschafft, diese Arbeit zu machen, hier ist was ich getan habe.

config.yml

knp_paginator: 
page_range: 5      # default page range used in pagination control 
default_options: 
    page_name: page    # page query parameter name 
    sort_field_name: sort   # sort field query parameter name 
    sort_direction_name: direction # sort direction query parameter name 
    distinct: false    # ensure distinct results, useful when ORM queries are using GROUP BY statements 
template: 
    pagination: 'KnpPaginatorBundle:Pagination:twitter_bootstrap_v3_pagination.html.twig'  # sliding pagination controls template 
    sortable: 'KnpPaginatorBundle:Pagination:sortable_link.html.twig' # sort link template 

repo

public function getQueryByTypeAndPro($type, User $user, $archive) 
    { 
     return $this->createQueryBuilder("opn") 
      ->andWhere("opn.type = :type") 
      ->setParameter("type", $type) 
      ->andWhere("opn.resellerId = :reseller") 
      ->setParameter("reseller", $user->getId()) 
      ->andWhere("opn.archive = :archive") 
      ->setParameter('archive', $archive) 
      ->orderBy("opn.dateCreation", "DESC") 
      ->getQuery() 
     ; 
    } 

Controller

private function resultsAction(Request $request, User $user, $type, $archive) 
    { 
     $em = $this->getDoctrine()->getManager(); 

     $paginator = $this->get('knp_paginator'); 

     $qb = $em->getRepository("STUserBundle:Operation")->getQueryByTypeAndPro($type, $user, $archive); 

     $results = $paginator->paginate(
      $qb, 
      $request->query->get('page',1), 
      $request->query->get('limit',50), 
      [ 
       'defaultSortFieldName'  => 'opn.dateCreation', 
       'defaultSortDirection' => 'desc' 
      ] 
     ); 

     return array("results" => $results, "archive" => $archive); 
    } 

und Zweig

<tr> 
      <th{% if results.isSorted('opn.id') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(results, 'general.vehicule.ref'|trans, 'opn.id') }}</th> 
      <th{% if results.isSorted('opn.vehiculeMarque') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(results, 'general.vehicule.vehicule'|trans, 'opn.vehiculeMarque') }}</th> 
      {% if typeOffre is defined and typeOffre == 'devisWeb' %}<th>Financement</th>{% endif %} 
      <th{% if results.isSorted('opn.clientNom') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(results, 'notifications.client'|trans, 'opn.clientNom') }}</th> 
      <th{% if results.isSorted('opn.dateCreation') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(results, 'general.date'|trans, 'opn.dateCreation') }}</th> 
      <th>{{ 'commerce.achat.encours.etat'|trans }}</th> 
     <th class="sorting_disabled">{{ 'commerce.achat.action'|trans }}</th> 
     <th class="sorting_disabled">{{ 'commerce.vente.operation.basculer'|trans }}</th> 
</tr> 

und so dass funktioniert

1

zu sortieren, entfernen Sie ->orderBy("opn.dateCreation", "DESC"). KnpPaginator hat spezielle Listener und Walker, die Ihre Anfrage mit ORDER BY basierend auf Anfrage modifizieren können und dann eine Paginate für Sie erstellen.

Konfig sortierbar Blick auf here. Übersetzung Blick auf here.

+0

Vielen Dank für Ihre Klarheit. Ich habe herausgefunden, wie die Übersetzung mit Ihren Links funktioniert. Aber das Löschen von '-> orderBy (" opn.dateCreation "," DESC ")' macht das nicht –

+0

setzen Sie Ihre Konfiguration des Bundles hier und schauen Sie sich diesen Beitrag https://stackoverflow.com/questions/27193249/symfony2-how -can-i-pass-parameter-sort-and-direction-using-knppaginatorbundle hoffe dir helfen –

+0

Danke für deine Hilfe, aber ich denke, ich habe ein anderes Problem von diesem Beitrag. Sorry kann nicht wirklich verstehen, was ich bis jetzt tun soll, ich werde versuchen, einen neuen Post zu machen. –