Foros del Web » Programando para Internet » PHP » Symfony »

problema paginador con filtros

Estas en el tema de problema paginador con filtros en el foro de Symfony en Foros del Web. Hola tengo un modulo de nombre proyecto, en donde tengo definido una accion index y dentro del index tengo los filtros( los que genera doctrine ...
  #1 (permalink)  
Antiguo 25/04/2011, 05:30
 
Fecha de Ingreso: agosto-2008
Mensajes: 88
Antigüedad: 16 años, 3 meses
Puntos: 0
problema paginador con filtros

Hola tengo un modulo de nombre proyecto, en donde tengo definido una accion index y dentro del index tengo los filtros( los que genera doctrine en la clase lib/filter) El problema esta en que tengo un paginador que me anda perfecto con el index. Pero cuando quiero filtrar solo me filtra la 1º pagina. Si quiero pasar a la 2º pagina filtrada me tira un error.
Los archivos son:
indexSuccess.php
Código PHP:
<?php
slot
(
        
'title',
        
sprintf('> Proyectos > Todos'))
?>
<h1>Proyectos</h1>
<h4>Buscar</h4>
<form action="<?php echo url_for('proyecto/filtrar'); ?>" method="post">
    <table border="1" cellpadding="1" cellspacing="1" class="tabla">
        <tbody>
            <?php
            
echo $filtro;
            
?>
        </tbody>
    </table>
    <input type="submit" value="Buscar" name="filtrar"/>
    <input class="button" type="reset" name="limpias" value="Limpiar"/>

</form>
<table border="1" cellpadding="1" cellspacing="1" class="tabla">
    <thead>
        <tr class="modo1">
            <th>Codigo identificador</th>
            <th>Nombre</th>
            <th>Fecha inicio</th>
            <th>Fecha fin estimada</th>
            <th>Fecha fin real</th>
            <th>Hs oficina calculada</th>
            <th>Hs proyecto calculada</th>
            <th>Hs proyecto cotizada</th>
            <th>Costo estimado</th>
            <th>Costo total</th>
            <th>Encargado</th>
            <th>Tipo Proyecto</th>
            <th>Contacto</th>
            <th>Usuarios Afectados </th>
            <th>Imagen</th>
            <th>PDF</th>
        </tr>
    </thead>
    <tbody>
        <?php
            $proyectos 
$pager->getResults();
        
?>
        <?php foreach ($proyectos as $proyecto): ?>
                <tr class="modo2">
                    <td><a href="<?php echo url_for('proyecto/show?id=' $proyecto->getId()) ?>">
<?php if ($proyecto->getCodigoIdentificador() == null) : ?>
                    <?php echo $proyecto->getContacto()->getClienteCiudad()->getCliente()->getCodigoIdentificador() . '-' $proyecto->getContacto()->getClienteCiudad()->getCodigoSede() . '-' $proyecto->getTipoProyecto()->getCodigoTipo() . '-' $proyecto->codigoIdentificador($proyecto->getTipoProyecto()->getId(), $proyecto->getId()) ?>
                    <?php else :
                        echo 
$proyecto->getCodigoIdentificador() ?>
                    <?php endif ?>
                    </a>
                </td>
                <td><a href="<?php echo url_for('proyecto/show?id=' $proyecto->getId()) ?>"><?php echo $proyecto->getNombre() ?></a></td>
                <td><?php
                        
if ($proyecto->getFechaInicio() != null):
                            echo 
date("d/m/Y"strtotime($proyecto->getFechaInicio()));
                        else:
                            echo 
"fecha no definida";
                        endif
                    
?></td>
                    <td><?php
                        
if ($proyecto->getFechaFinEstimada() != null):
                            echo 
date("d/m/Y"strtotime($proyecto->getFechaFinEstimada()));
                        else:
                            echo 
"fecha no definida";
                        endif
                    
?></td>
                    <td><?php
                        
if ($proyecto->getFechaFinReal() != null):
                            echo 
date("d/m/Y"strtotime($proyecto->getFechaFinReal()));
                        else:
                            echo 
"fecha no definida";
                        endif
                    
?></td>
                    <td><?php echo $proyecto->getHsOficinaCalculada() ?></td>
                    <td><?php echo $proyecto->getHsProyectoCalculada() ?></td>
                    <td><?php echo $proyecto->getHsProyectoCotizada() ?></td>
                    <td><?php echo $proyecto->getCostoEstimado() ?></td>
                    <td><?php echo $proyecto->getCostoTotal() ?></td>
                    <td><?php echo $proyecto->getSfGuardUser() ?></td>
                    <td><?php echo $proyecto->getTipoProyecto() ?></td>
                    <td><?php echo $proyecto->getContacto() ?></td>
                    <td><?php
                        $usuarios 
$proyecto->getUsuariosProyecto();
                        foreach (
$usuarios as $i => $usuario):
                            echo 
$usuario '<br>';
                        endforeach
                    
?>
                    </td>
                    <td> <?php echo image_tag('/uploads/images/thumbs/' $proyecto->getFilename(), array('alt' =>
                            
$proyecto->getCodigoIdentificador())); ?></td>
                    <td><a href="<?php echo url_for('proyecto/pdf?id=' $proyecto->getId()) ?>">Ver PDF</a></td>
                </tr>
<?php endforeach; ?>
            </tbody>
        </table>
<?php include_partial('proyecto/paginas', array('pager' => $pager)) ?>
                <a href="<?php echo url_for('proyecto/iniciados'?>">Iniciados</a> | <a href="<?php echo url_for('proyecto/finalizados'?>">Finalizados</a> | <a href="<?php echo url_for('proyecto/solpe'?>">Con Solped</a> | <a href="<?php echo url_for('proyecto/facturados'?>">Facturados</a> | <a href="<?php echo url_for('proyecto/cobrados'?>">Cobrados</a><br>
                        <a href="<?php echo url_for('proyecto/new'?>">Registrar</a>
executeIndex y executeFiltrar
Código PHP:
public function executeIndex(sfWebRequest $request) {
        
$this->proyectos Doctrine_Core::getTable('Proyecto')
                        ->
createQuery('a')
                        ->
execute();
        if (
sfConfig::has('app_max_registros')) {
            
$nro sfConfig::get('app_max_registros');
        } else {
            
$nro 10;
        }
        
$this->pager = new sfDoctrinePager(
                        
'proyecto',
                        
$nro
        
);
        
$this->pager->setQuery(Doctrine::getTable('Proyecto')->createQuery('a'));
        
$this->pager->setPage($request->getParameter('page'1));
        
$this->pager->init();
        
$this->filtro = new ProyectoFormFilter();
    }

    public function 
executeFiltrar(sfWebRequest $request) {
        
$this->filtro = new ProyectoFormFilter();
        
$this->filtro->bind($request->getParameter('proyecto_filters'));
        if (
$this->filtro->isValid()) {
            
//$this->consulta = $this->filtro->buildQuery($this->filtro->getValues());
            //$this->proyectos = $this->consulta->execute();
            
$query $this->filtro->buildQuery($this->filtro->getValues());
            if (
sfConfig::has('app_max_registros')) {
                
$nro sfConfig::get('app_max_registros');
            } else {
                
$nro 10;
            }

            
$this->pager = new sfDoctrinePager('proyecto'$nro);
            
$this->pager->setQuery($query);
            
//$this->pager->getQuery();
            
$this->pager->setPage($this->getRequestParameter('page'1));
            
$this->pager->init();
            
//var_dump($this->consulta);die;
        
}
        
$this->setTemplate('index');
    } 
_paginas.php
Código PHP:
<?php if ($pager->haveToPaginate()): ?>
  <div class="pagination">
    <a href="?page=1">
      <img src="/images/first.png" alt="Primera Página" />
    </a>

    <a href="?page=<?php echo $pager->getPreviousPage() ?>">
      <img src="/images/previous.png" alt="Previous page" title="Página Anterior" />
    </a>

    <?php foreach ($pager->getLinks() as $page): ?>
      <?php if ($page == $pager->getPage()): ?>
        <?php echo '<strong>'.$page.'</strong>' ?>
      <?php else: ?>
        <a href="?page=<?php echo $page ?>"><?php echo $page ?></a>
      <?php endif; ?>
    <?php endforeach; ?>

    <a href="?page=<?php echo $pager->getNextPage() ?>">
      <img src="/images/next.png" alt="Next page" title="Proxima Página" />
    </a>

    <a href="?page=<?php echo $pager->getLastPage() ?>">
      <img src="/images/last.png" alt="Last page" title="Última Página" />
    </a>
  </div>
<?php endif; ?>
El error que me tira cuando quiero pasar de pagina es Notice: Undefined variable: pager in /home/agustin/web/i4d/apps/backend/modules/proyecto/templates/indexSuccess.php on line 43
  #2 (permalink)  
Antiguo 25/04/2011, 21:24
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: problema paginador con filtros

defines $this->pager dentro del bloque if ($this->filtro->isValid()) { , eso quiere decir que el filtro no validó adecuadamente y por ello $this->pager ($pager en la vista) nunca se definió, revisa en primera instancia porque el filtro no pasó la validación.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 26/04/2011, 06:52
 
Fecha de Ingreso: agosto-2008
Mensajes: 88
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: problema paginador con filtros

pero el filtro si filtra, el error no lo tira en la 1º pagina que filtra(la cual funciona bien) sino que no me deja paginar
  #4 (permalink)  
Antiguo 26/04/2011, 08:35
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: problema paginador con filtros

el error es claro, en algún controlador no se está definiendo $this->pager, por lo tanto en la plantilla indexSucces no puede conseguir $pager, deberás depurar bien el código porque no consigo otra fuente que no sea la anterior
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 26/04/2011, 17:15
 
Fecha de Ingreso: agosto-2008
Mensajes: 88
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: problema paginador con filtros

Como hago para depurar el codigo paso a paso en php?
gracias
  #6 (permalink)  
Antiguo 26/04/2011, 20:39
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: problema paginador con filtros

has un var_dump($this->filtro->isValid()); en el controlador para ver si en efecto está devolviendo true, ignora los warnings que saldrán, concentrarte en el formulario.

podrías instalar xdebug+netbeans (zend studio o eclipse), pero con servidores windows suele caerse a menudo, la estabilidad es mejor con GNU/Linux
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 27/04/2011, 03:26
Avatar de historiasdemaria  
Fecha de Ingreso: septiembre-2010
Ubicación: www
Mensajes: 433
Antigüedad: 14 años, 1 mes
Puntos: 54
Respuesta: problema paginador con filtros

Tiene razon maycolalvarez,
mira, porque no instancias pager antes de la condicion?:

if ($this->filtro->isValid())

y luego ya veras porque pasa o no pasa la condicion if ($this->filtro->isValid())
  #8 (permalink)  
Antiguo 27/04/2011, 06:22
 
Fecha de Ingreso: agosto-2008
Mensajes: 88
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: problema paginador con filtros

En la 1º pagina var_dump($this->filtro->isValid()); devuelve true. En la 2º pagina que entro con el filtro me da false. Debe ser un problema de que no pasa el $this->filtro->bind($request->getParameter('proyecto_filters')); a la segunda pagina
  #9 (permalink)  
Antiguo 28/04/2011, 05:39
 
Fecha de Ingreso: agosto-2008
Mensajes: 88
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: problema paginador con filtros

Existe alguna forma de que guarde el parametro del filtro en una variable global o de sesion para que la misma no este vacia cuando pase de pagina?
gracias

Etiquetas: filtros, frameworks-y-php-orientado-a-objetos, paginador
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




La zona horaria es GMT -6. Ahora son las 08:46.