Thomas %!s(int64=14) %!d(string=hai) anos
pai
achega
9bf654fcfb
Modificáronse 5 ficheiros con 36 adicións e 37 borrados
  1. 4 1
      Admin/Admin.php
  2. 12 8
      Resources/views/CRUD/base_list.twig
  3. 13 9
      Tool/Datagrid.php
  4. 2 2
      Tool/DoctrinePager.php
  5. 5 17
      Tool/Pager.php

+ 4 - 1
Admin/Admin.php

@@ -352,7 +352,10 @@ abstract class Admin extends ContainerAware
     {
         if(!$this->filter_datagrid) {
 
-            $this->filter_datagrid = new \Bundle\BaseApplicationBundle\Tool\Datagrid($this->getClass(), $this->getEntityManager());
+            $this->filter_datagrid = new \Bundle\BaseApplicationBundle\Tool\Datagrid(
+                $this->getClass(),
+                $this->getEntityManager()
+            );
 
             $this->configureFilterFields();
             

+ 12 - 8
Resources/views/CRUD/base_list.twig

@@ -35,25 +35,26 @@ file that was distributed with this source code.
             {% block table_body %}{% endblock %}
 
             {% block table_footer %}
-                {% if pager.haveToPaginate() %}
+
+                {% if datagrid.pager.haveToPaginate() %}
                     <tr>
                         <td colspan="{{ fields|length }}" class="pager">
                             <ul>
-                                {% if pager.page != pager.previouspage %}
-                                    <li><a href="{{ pager.renderLink(pager.previouspage) }}">{% trans 'link_previous_pager' from 'BaseApplicationBundle' %}</a></li>
+                                {% if datagrid.pager.page != datagrid.pager.previouspage %}
+                                    <li><a href="{{ configuration.generateUrl('list', datagrid.values|merge({'page': datagrid.pager.previouspage})) }}">{% trans 'link_previous_pager' from 'BaseApplicationBundle' %}</a></li>
                                 {% endif %}
 
                                 {# Set the number of pages to display in the pager #}
-                                {% for page in pager.getLinks(5) %}
-                                    {% if page == pager.page %}
+                                {% for page in datagrid.pager.getLinks(5) %}
+                                    {% if page == datagrid.pager.page %}
                                         <li>{{ page }}</li>
                                     {% else %}
-                                        <li><a href="{{ pager.renderLink(page) }}">{{ page }}</a></li>
+                                        <li><a href="{{ configuration.generateUrl('list', datagrid.values|merge({'page': page})) }}">{{ page }}</a></li>
                                     {% endif %}
                                 {% endfor %}
 
-                                {% if pager.page != pager.nextpage %}
-                                    <li><a href="{{ pager.renderLink(pager.nextpage) }}">{% trans 'link_previous_pager' from 'BaseApplicationBundle' %}</a></li>
+                                {% if datagrid.pager.page != datagrid.pager.nextpage %}
+                                    <li><a href="{{ configuration.generateUrl('list', datagrid.values|merge({'page': datagrid.pager.nextpage})) }}">{% trans 'link_previous_pager' from 'BaseApplicationBundle' %}</a></li>
                                 {% endif %}
                             </ul>
                         </td>
@@ -84,6 +85,9 @@ file that was distributed with this source code.
         {% endfor %}
 
         <input type="submit" value="{% trans 'btn_filter' from 'BaseApplicationBundle' %}" />
+
+        <a href="{{ configuration.generateUrl('list') }}">{% trans 'link_reset_filter' from 'BaseApplicationBundle' %}</a>
+
     </form>
 {% endblock %}
 

+ 13 - 9
Tool/Datagrid.php

@@ -20,8 +20,6 @@ use Bundle\BaseApplicationBundle\Filter\CallbackFilter;
 use Bundle\BaseApplicationBundle\Filter\ChoiceFilter;
 
 
-
-
 class Datagrid
 {
 
@@ -44,10 +42,13 @@ class Datagrid
 
     protected $values;
 
-    public function __construct($classname, $entity_manager)
+    protected $pager;
+
+    public function __construct($classname, $entity_manager, $values = array())
     {
         $this->classname = $classname;
         $this->entity_manager = $entity_manager;
+        $this->values = $values;
     }
 
     public function getClassMetaData()
@@ -57,15 +58,18 @@ class Datagrid
         return $em->getClassMetaData($this->getClassname());
     }
 
-    public function getPager($values)
+    public function getPager()
     {
-        $pager = new Pager($this->getClassname());
 
-        $pager->setQueryBuilder($this->getQueryBuilder($values));
-        $pager->setPage(isset($values['page']) ? $values['page'] : 1);
-        $pager->init();
+        if(!$this->pager) {
+            $this->pager = new Pager($this->getClassname());
+
+            $this->pager->setQueryBuilder($this->getQueryBuilder($this->values));
+            $this->pager->setPage(isset($this->values['page']) ? $this->values['page'] : 1);
+            $this->pager->init();
+        }
 
-        return $pager;
+        return $this->pager;
     }
 
     public function getResults()

+ 2 - 2
Tool/DoctrinePager.php

@@ -88,7 +88,7 @@ class DoctrinePager extends Pager implements \Serializable
         $this->resetIterator();
 
         $countQuery = $this->getCountQuery();
-        $countQuery->setParameters($this->getParameterHolder()->all());
+        $countQuery->setParameters($this->getParameters());
 
         $count = $countQuery->getSingleScalarResult();
 
@@ -97,7 +97,7 @@ class DoctrinePager extends Pager implements \Serializable
         $query = $this->getQuery();
         
         $query
-            ->setParameters($this->getParameterHolder()->all())
+            ->setParameters($this->getParameters())
             ->setFirstResult(0)
             ->setMaxResults(0);
 

+ 5 - 17
Tool/Pager.php

@@ -10,9 +10,6 @@
 
 namespace Bundle\BaseApplicationBundle\Tool;
 
-
-use Symfony\Component\HttpFoundation\ParameterBag;
-
 /**
  * sfPager class.
  *
@@ -51,7 +48,6 @@ abstract class Pager implements \Iterator, \Countable
     {
         $this->setClass($class);
         $this->setMaxPerPage($maxPerPage);
-        $this->parameterBag = new ParameterBag();
     }
 
     /**
@@ -133,14 +129,6 @@ abstract class Pager implements \Iterator, \Countable
         return $links;
     }
 
-//    public function renderLink($page)
-//    {
-//        $params = $this->getParameterHolder()->all();
-//        $params['page'] = $page;
-//
-//        return $this->getRouter()->generate($this->getRoute(), $params);
-//    }
-
     /**
      * Returns true if the current query requires pagination.
      *
@@ -458,9 +446,9 @@ abstract class Pager implements \Iterator, \Countable
      *
      * @return sfParameterHolder
      */
-    public function getParameterHolder()
+    public function getParameters()
     {
-        return $this->parameterBag;
+        return $this->parameters;
     }
 
     /**
@@ -473,7 +461,7 @@ abstract class Pager implements \Iterator, \Countable
      */
     public function getParameter($name, $default = null)
     {
-        return $this->parameterBag->get($name, $default);
+        return isset($this->parameters[$name]) ? $this->parameters[$name] : $default;
     }
 
     /**
@@ -485,7 +473,7 @@ abstract class Pager implements \Iterator, \Countable
      */
     public function hasParameter($name)
     {
-        return $this->parameterBag->has($name);
+        return isset($this->parameters[$name]);
     }
 
     /**
@@ -496,7 +484,7 @@ abstract class Pager implements \Iterator, \Countable
      */
     public function setParameter($name, $value)
     {
-        $this->parameterBag->set($name, $value);
+        $this->parameters[$name] = $value;
     }
 
     /**