Browse Source

Fix pagination

Thomas Rabaix 13 years ago
parent
commit
398a49603b
2 changed files with 25 additions and 6 deletions
  1. 22 3
      Model/ORM/ModelManager.php
  2. 3 3
      Resources/views/CRUD/base_list.html.twig

+ 22 - 3
Model/ORM/ModelManager.php

@@ -49,6 +49,7 @@ class ModelManager implements ModelManagerInterface
     /**
      * Returns true is the model has some metadata
      *
+     * @param $class
      * @return boolean
      */
     public function hasMetadata($class)
@@ -59,7 +60,10 @@ class ModelManager implements ModelManagerInterface
     /**
      * Returns a new FieldDescription
      *
-     * @abstract
+     * @throws \RunTimeException
+     * @param $class
+     * @param $name
+     * @param array $options
      * @return \Sonata\AdminBundle\Admin\ORM\FieldDescription
      */
     public function getNewFieldDescriptionInstance($class, $name, array $options = array())
@@ -306,7 +310,21 @@ class ModelManager implements ModelManagerInterface
             $values['_sort_by']     = $fieldDescription->getOption('sortable');
         }
 
-        return $values;
+        return array('filter' => $values);
+    }
+
+    /**
+     * @param \Sonata\AdminBundle\Datagrid\DatagridInterface $datagrid
+     * @param $page
+     * @return void
+     */
+    public function getPaginationParameters(DatagridInterface $datagrid, $page)
+    {
+        $values = $datagrid->getValues();
+
+        $values['_page'] = $page;
+
+        return array('filter' => $values);
     }
 
     /**
@@ -317,7 +335,8 @@ class ModelManager implements ModelManagerInterface
     {
         return array(
             '_sort_order' => 'ASC',
-            '_sort_by'    => implode(',', $this->getModelIdentifier($class))
+            '_sort_by'    => implode(',', $this->getModelIdentifier($class)),
+            '_page'       => 1
         );
     }
 

+ 3 - 3
Resources/views/CRUD/base_list.html.twig

@@ -79,7 +79,7 @@ file that was distributed with this source code.
                             <td colspan="{{ admin.list.elements|length }}" class="pager">
                                 <ul>
                                     {% if admin.datagrid.pager.page != admin.datagrid.pager.previouspage %}
-                                        <li><a href="{{ admin.generateUrl('list', admin.datagrid.values|merge({'_page': admin.datagrid.pager.previouspage})) }}">{% trans from 'SonataAdminBundle' %}link_previous_pager{% endtrans %}</a></li>
+                                        <li><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, admin.datagrid.pager.previouspage)) }}">{% trans from 'SonataAdminBundle' %}link_previous_pager{% endtrans %}</a></li>
                                     {% endif %}
 
                                     {# Set the number of pages to display in the pager #}
@@ -87,12 +87,12 @@ file that was distributed with this source code.
                                         {% if page == admin.datagrid.pager.page %}
                                             <li>{{ page }}</li>
                                         {% else %}
-                                            <li><a href="{{ admin.generateUrl('list', admin.datagrid.values|merge({'_page': page})) }}">{{ page }}</a></li>
+                                            <li><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, page)) }}">{{ page }}</a></li>
                                         {% endif %}
                                     {% endfor %}
 
                                     {% if admin.datagrid.pager.page != admin.datagrid.pager.nextpage %}
-                                        <li><a href="{{ admin.generateUrl('list', admin.datagrid.values|merge({'_page': admin.datagrid.pager.nextpage})) }}">{% trans from 'SonataAdminBundle' %}link_next_pager{% endtrans %}</a></li>
+                                        <li><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, admin.datagrid.pager.nextpage)) }}">{% trans from 'SonataAdminBundle' %}link_next_pager{% endtrans %}</a></li>
                                     {% endif %}
                                 </ul>
                             </td>