Foros del Web » Programando para Internet » PHP »

Paginación con ZF

Estas en el tema de Paginación con ZF en el foro de PHP en Foros del Web. Hola a todos, tengo un problema con la paginación en zend framework, lo que sucede es que cuando hago una búsqueda el resultado lo pagina ...
  #1 (permalink)  
Antiguo 27/09/2010, 09:40
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años, 7 meses
Puntos: 2
Paginación con ZF

Hola a todos, tengo un problema con la paginación en zend framework, lo que sucede es que cuando hago una búsqueda el resultado lo pagina , pero cuando visito la segunda página de la paginación me devuelve un error:

Exception information:

Message: No adapter for type NULL

Creo que al visitar la segunda página no almacena el resuldato de mi query por eso me muestra el error, he intentado guardar en un temporal el resultado y con estructuras de control prevenir la pérdida de dicha consulta pero no logro resolver el problema.

Alguien me puediera ayudar con este tema se los agradecere bastante. Gracias.

Un saludo,
  #2 (permalink)  
Antiguo 27/09/2010, 09:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Paginación con ZF

Como es que creas el objeto Zend_Pagination, muestra tu código...

Saludos.
  #3 (permalink)  
Antiguo 27/09/2010, 10:21
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Paginación con ZF

hola GatorV gracia por responder, este es mi codigo:

el order/pagination/pagination_control.phtml

Código PHP:
<?php
if ($this->pageCount): ?>
<div class="paginationControl">
<!-- Previous page link -->
<?php if (isset($this->previous)): ?>
  <a href="<?php echo $this->url(array('page'
      
=> $this->previous)); ?>">< Anterior</a> |
<?php else: ?>
  <span class="disabled">< Anterior</span> |
<?php endif; ?>

<!-- Numbered page links -->
<?php foreach ($this->pagesInRange as $page): ?>
  <?php if ($page != $this->current): ?>
    <a href="<?php echo $this->url(array('page'
    
=> $page)); ?>"><?php echo $page?></a> |
  <?php else: ?>
    <?php echo $page?> |
  <?php endif; ?>
<?php 
endforeach; ?>

<!-- Next page link -->
<?php if (isset($this->next)): ?>
  <a href="<?php echo $this->url(array('page'
  
=> $this->next)); ?>">Siguiente ></a>
<?php else: ?>
  <span class="disabled">Siguiente ></span>
<?php endif; ?>
</div>
<?php endif; ?>
El el controlador tengo:
Código PHP:
public function resultAction()
    {  

        
                if (
$this->getRequest()->isPost()) {
        
$formData $this->getRequest()->getPost();
            if (
$form->isValid($formData)) {

                            
$anho=$form->getValue('anho');
                            
$num $form->getValue('num');
                            
$state$form->getValue('estado');
                            
$order = new Admin_Model_OrderDao();
                       
$orden=$order->listOrderEstado($state);
                            

                            
                               
                                }
                                


            
    }
    
    
$page $this->_getParam('page'1);
            
// número de registros a mostrar por página
            
$registros_pagina 30;
            
// número máximo de páginas a mostrar en el paginador
            
$rango_paginas 5;
               
// $this->view->orden = $order->beginOrder();


               
$paginador Zend_Paginator::factory($ordentm);
              
$paginador->setItemCountPerPage($registros_pagina)
                      ->
setCurrentPageNumber($page)
                      ->
setPageRange($rango_paginas);
                
$this->view->orden $paginador;

    } 
y las vista:

Código PHP:
<table class="table_list_order" align="center" >
       <tr class="table_header">

               <th>OS</th>
               <th>Cliente</th>
               <th>Depósito</th>
               <th>Mercancía</th>
               <th>Nave</th>
               <th>ETA</th>
               <th>Nº DUA</th>
               <th>Línea/Cons</th>
               <th>B/L Madre</th>
               <th>B/L Hijo</th>
               <th>Factura</th>
               <th>Carga</th>
               <th>Estado</th>
               <th>Editar</th>
               <th>Eliminar</th>
               <th>Doc.</th>
               <th>Inci.</th>

       </tr>
       <?php
       $ban
=0;
       foreach(
$this->orden as $order):
       
$canales=$this->escape($order['canal']);
       
/*if($canales=='naranja'||$canales=='verde'||$canales=='rojo'){ */
       
if(($ban 2)==0){
       
?>

    <tr class="row_odd">
    <?php }else {?>
    <tr class="row_even">
    <?php $id=$this->escape($order['id']);
          
?>

        <th><?php echo $this->escape($order['numero']);?></th>
        <th><?php echo $this->escape($order['abreviatura']);?></th>
        <?php
          $mod
=$this->escape($order['modalidad']);
          if(
$mod=='anticipado' || $mod=='urgente'){
                if(
$mod=='anticipado'){?>
                   <th class="modAnticipado"><?php echo $this->escape($order['name_terminal']);?></th>
              <?php  }
              if(
$mod=='urgente'){?>
                   <th class="modUrgente"><?php echo $this->escape($order['name_terminal']);?></th>
              <?php  }
          }else{
?>
              <th><?php echo $this->escape($order['name_terminal']);?></th>
          <?php }
        
?>

        <th><?php echo $this->escape($order['mercancia']);?></th>
        <th><?php echo $this->escape($order['nave']);?></th>
        <?php if($this->escape($order['eta'])==NULL || $this->escape($order['eta'])=='0000-00-00'){?>
            <th></th>
        <?php }else{?>
            <th><?php $eta1=explode("-",$this->escape($order['eta']));
                  echo 
$eta1[2]."/".$eta1[1]."/".$eta1[0];?></th>
    <?php     }

        
$canales=$this->escape($order['canal']);
       if(
$canales=='naranja'||$canales=='verde'||$canales=='rojo'){
        if(
$canales=='verde'){?>
        <th class="cell_green"><?php echo $this->escape($order['num_decl']);?></th><?php }?>
        <?php if($canales=='naranja'){?>
        <th class="cell_orange"><?php echo $this->escape($order['num_decl']);?></th><?php }?>
        <?php if($canales=='rojo'){?>
        <th class="cell_red"><?php echo $this->escape($order['num_decl']);?></th><?php }}else{?>
        <th><?php echo $this->escape($order['num_decl']);?></th><?php }?>
        <th><?php
              
echo $this->escape($order['linea']);
              echo 
"/";
             echo 
$this->escape($order['consolidador']);

        
?></th>
        <th><?php echo $this->escape($order['bl_madre']);?></th>
        <th><?php echo $this->escape($order['bl_hijo']);?></th>
        <th><?php echo $this->escape($order['factura']);?></th>
        <th><?php if($this->escape($order['embarque']=='contenedor')){
              echo 
$this->escape($order['cantidad']);
              echo 
"x";
             echo 
$this->escape($order['tamanhio']);
        }else{

                 echo 
$this->escape($order['embarque']);
             }

        
?></th>

        <th><?php echo $this->escape($order['estado']); ?></th>
        <th width="30" align="center">
            <a href="<?php echo $this->url(array('controller'=>'order','action'=>'edit','id'=>$order['id']));?>"><img src="<?php echo $this->baseUrl().'/images/edit-icon.gif'?> "border="0" title="Editar"></img></a>
            </th>
            <th width="30" align="center">
            <a href="<?php echo $this->url(array('controller'=>'order','action'=>'delete','id'=>$order['id']));?>"><img src="<?php echo $this->baseUrl().'/images/delete-icon.gif'?> "border="0" title="Eliminar" ></img></a>
        </th>
        <th width="30" align="center">
        <?php $certi=$this->escape($order['certificado']);
               if(
$certi=='ninguno' || $certi==' '){?>
                    <a href="<?php echo $this->url(array('controller'=>'order','action'=>'documents','id'=>$order['id']));?>"><img src="<?php echo $this->baseUrl().'/images/document-icon.gif'?> "border="0"></img></a>
              <?php  }else{?>
                       <a href="<?php echo $this->url(array('controller'=>'order','action'=>'documents','id'=>$order['id']));?>"><img src="<?php echo $this->baseUrl().'/images/documentos_restriccion.png'?> "border="0" title="Certificado <?php echo $certi?>"></img></a>
            <?php }

        
?>

        </th>
        <th width="30" align="center">
            <a href="<?php echo $this->url(array('controller'=>'order','action'=>'incedence','id'=>$order['id']));?>"><img src="<?php echo $this->baseUrl().'/images/incide-icon.gif'?> "border="0" title="Incidencias"></img></a>
            <input type="hidden" name="numero_for_inci" value="<?php echo $this->escape($order['numero']);?>" />
        </th>
    </tr>

    <?php $ban ++; endforeach;?>


    <tr  class="row_odd">
<th colspan="17" align=center>
<?php
echo $this->paginationControl($this->orden,
    
'Sliding',
    
'order/pagination/pagination_control.phtml');
?></th></tr>

</table>
<form id="form1" name="form1" method="post" action="<?php echo $this->url(array('action'=>'busqueda')); ?>">
  <input type="hidden" name="cliente_id" value="<?php echo $this->cliente_id;?>"/>
  <input type="hidden" name="status" value="<?php echo $this->status;?>"/>
  <input type="hidden" name="num_orden" value="<?php echo $this->num_orden;?>"/>
  <label>
  <input type="submit"  name="Submit" value="Exportar" class="nuevo1" />
  </label>
</form>
  #4 (permalink)  
Antiguo 27/09/2010, 11:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Paginación con ZF

De donde sacas tu variable $ordentm no muestras esa parte en tu controlador...

Saludos.
  #5 (permalink)  
Antiguo 27/09/2010, 11:38
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Paginación con ZF

Disculpa GatorV, ese valor estaba probando en un temporal, osea era:

Código PHP:
....
$orden=$order->listOrderEstado($state);
$ordentm=$orden;

.... 
y trabajaba con $ordentm

pero en el codigo q te mande debe de ser $orden.

Saludos,
  #6 (permalink)  
Antiguo 27/09/2010, 12:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Paginación con ZF

Pues lo que veo es que tu código solo se ejecuta si mandas el formulario, ese es tu error, debes de pasar tus valores por GET para que se mantengan al hacer la paginación.

Saludos.
  #7 (permalink)  
Antiguo 27/09/2010, 22:24
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Paginación con ZF

Gracias GatorV pero estoy tratando de hacer lo que me mencionas pero no he logrado pasar los parámetros por GET, me podrías dar una mano de como hacer eso.

Te lo agradecería bastante.

Un saludo,
  #8 (permalink)  
Antiguo 27/09/2010, 22:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Paginación con ZF

Pues solamente cambia el método de tu formulario a que sea GET y al dibujar tus links de paginación pasando los parámetros, yo lo que hice es crear un helper para eso:
Código PHP:
Ver original
  1. class Admin_View_Helper_UrlParameters extends Zend_View_Helper_Abstract
  2. {
  3.     public function urlParameters($page)
  4.     {
  5.         $front = Zend_Controller_Front::getInstance();
  6.         $request = $front->getRequest();
  7.        
  8.         $params = $request->getParams();
  9.         $params['page'] = $page;
  10.         return $this->view->url($params);
  11.     }
  12. }

Posteriormente lo uso en mis paginaciones:
Código PHP:
Ver original
  1. <?php if ($this->pageCount): ?>
  2. <div class="paginationControl">
  3. <!-- Previous page link -->
  4. <?php if (isset($this->previous)): ?>
  5.   <a href="<?php echo $this->urlParameters($this->previous); ?>">
  6.     &lt; Anterior
  7.   </a> |
  8. <?php else: ?>
  9.   <span class="disabled">&lt; Anterior</span> |
  10. <?php endif; ?>
  11.  
  12. <!-- Numbered page links -->
  13. <?php foreach ($this->pagesInRange as $page): ?>
  14.   <?php if ($page != $this->current): ?>
  15.     <a href="<?php echo $this->urlParameters($page); ?>">
  16.         <?php echo $page; ?>
  17.     </a> |
  18.   <?php else: ?>
  19.     <?php echo $page; ?> |
  20.   <?php endif; ?>
  21. <?php endforeach; ?>
  22.  
  23. <!-- Next page link -->
  24. <?php if (isset($this->next)): ?>
  25.   <a href="<?php echo $this->urlParameters($this->next); ?>">
  26.     Siguiente &gt;
  27.   </a>
  28. <?php else: ?>
  29.   <span class="disabled">Siguiente &gt;</span>
  30. <?php endif; ?>
  31. </div>
  32. <?php endif; ?>

Saludos.
  #9 (permalink)  
Antiguo 28/09/2010, 07:16
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Paginación con ZF

Gracias GatorV, estoy viendo el código que me pasaste, pero ahora me encuentro en una disyuntiva. Mira mi aplicación cuando levanta muestra un listado de ordenes que tengo, es ahi donde tengo un formulario de busqueda eso es en el indexAxtion del OrdenController, la pregunta es si la busqueda lo hago en el mismo Action o en otro como por ejemplo el findAction para poder aplicar lo que me propones.

Saludos,
  #10 (permalink)  
Antiguo 28/09/2010, 08:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Paginación con ZF

Lo puedes hacer en el mismo o en otro Action, no hay problema con eso el chiste es que estes pasando tus parámetros por GET, y que transmitas las variables por el url para poder paginar.

Saludos.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:12.