Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo Gomes

[Resolvido] Páginar uma Busca (Zend Paginator)

Recommended Posts

O problema é o seguinte.

Estou utilizando o Zend_Paginator para fazer a páginação de uma listagem de dados. Funciona perfeitamente.

Mas quando restrinjo a listagem, fazendo uma busca é que começa o problema.

A busca é feita e mostra a primeira página, só que quando mudo de página eu perco os dados da busca e ele faz a listagem geral dos dados.

 

Como solucionar isso, sem usar sessão?

 

Form da busca (nesse caso fica no main.phtml dentro de applicattion/defaults/layoults)

 

<form name="form_busca" id="form_busca" action="<?=$this->url(array('module'=>'default','controller'=>'index','action'=>'busca'),'',true)?>">
        	<p>
        		<label for="palavra_chave">Busca de estabelecimentos:</label>
        		<input type="text" name="palavra_chave" id="palavra_chave" <?if($this->busca) print 'value="'.$this->busca.'"'; else print 'value="Digite aqui"';?> class="palavra_chave" />
        		<img src="<?php echo $this->baseUrl();?>/img_page1/bt_buscar.png" class="submit_busca" onclick="document.forms['form_busca'].submit();" onMouseOver="this.style.cursor = 'pointer'"/>
        	</p>
        </form>

Action da busca no controler Index:

 

public function buscaAction() {
		$auxPag            = new Max_PaginacaoAuxiliar();
		$this->view->busca = $this->_getParam ('palavra_chave');
		
		$this->view->where = $auxPag->getBusca($this->_getParam ('palavra_chave'),array('reg_cod_convenio', 'reg_cod_segmento', 'con_nome', 'seg_nome', 'est_nomefantasia'))	;
		$paginas           = Zend_Paginator::factory ( $this->bd->select()
																->from('regras')
																	->join('convenios','reg_cod_convenio = con_cod', 'con_nome as convenio')
																	->joinleft('segmentos',"reg_cod_segmento = seg_cod AND (reg_tipo = 'B' OR reg_tipo = 'P')", 'seg_nome as segmento')
																	->joinleft('estabelecimentos',"reg_cod_segmento = est_cod AND reg_tipo = 'L'", 'est_nomefantasia as estabelecimento')
																->order('convenio ASC' )
																->where($this->view->where));
		
		$paginas->setItemCountPerPage ($auxPag->getQuantRegistro($this->_getParam ( 'registro' )) );
		$paginas->setCurrentPageNumber ($this->_helper->paginaAtual ( $this->_getParam ( 'pagina' ), isset($_GET['pagina'])?$_GET['pagina']:NULL ) );
		$this->view->paginas = $paginas;
		
		$this->view->titulo = "Busca";
	}

paginator.phtml dentro de views/scripts/partial

 

<?php if ($this->pageCount): ?> 
	<div id="tabela_paginacao">
	Página
    <!-- Página anterior --> 
    <?php if (isset($this->previous)): ?> 
        <a href="<?= $this->url(array('pagina' => $this->previous)); ?>" title="Página anterior" onclick="passarPagina('voltar');"><img name="voltar" src="<?=$this->baseUrl()?>/images/botoes/pag_anterior.gif" /></a> 
        <?php if ($this->firstPageInRange!=1): ?> 
          
        <?php endif; ?> 
    <?php else: ?>
        <img name="voltar" src="<?=$this->baseUrl()?>/images/botoes/pag_anterior_off.gif" />
    <?php endif; ?> 
     <form method="get" action="<?= $this->url(array()); ?>">    
     <input type="text" name="pagina" id="pagina" value="<?=$this->current?>" />    
     </form>   
    <?php if (isset($this->next)): ?> 
 	    <a href="<?= $this->url(array('pagina' => $this->next)); ?>" title="Próxima página" ><img name="avancar" src="<?=$this->baseUrl()?>/images/botoes/pag_proximo.gif" /></a>
    <?php else: ?>
        <img name="avancar" src="<?=$this->baseUrl()?>/images/botoes/pag_proximo_off.gif" />
    <?php endif; ?> 
    de <span><?=$this->pageCount?></span> páginas | 
     Ver <select name="registros" id="registros" onchange="document.location.href='<?= $this->url(array('dado'=>'1','registro'=>null)); ?>/registro/'+this.value;">
     				<option <? if($this->itemCountPerPage==20) print 'selected="selected"' ?> value="20">20</option>
					<option <? if($this->itemCountPerPage==50) print 'selected="selected"' ?> value="50">50</option>
					<option <? if($this->itemCountPerPage==100) print 'selected="selected"' ?> value="100">100</option>
		</select> por página |
    Total de <span><?=$this->totalItemCount?></span> registros
</div>
<?php endif; ?>

E por fim o busca.phtml dentro de views/scritps/index (a view da action postada mais acima)

 

<?php

/**
 * Default home page view
 *  
 * @author
 * @version
 */

$this->headTitle('Plus-Card');
$this->placeholder('title')->set('Plus-Card');
?>

    	<h1 class="titulo_secao"><?php echo $this->titulo;?></h1>
        <br />
         <?=$this->paginationControl($this->paginas, 'Elastic', 'partial/paginacao.phtml')?>
		<br /><br />
		<table>
		<?
		 	$i = 0; foreach ($this->paginas as $usu) {
		?>
		  	<tr class="">
			    <?php if($usu['reg_tipo'] == 'L') {
			    ?>
			    <td>O convênio <span class="fonte_vermelho"><?=$usu['convenio']?></span> pode ser utilizado na rede <span class="fonte_vermelho"><?=$usu['estabelecimento']?></span></td>
			    <?
			    } else {
			    ?>
			    <td>O convênio <span class="fonte_vermelho"><?=$usu['convenio']?></span> pode ser utilizado no segmento <span class="fonte_vermelho"><?=$usu['segmento']?></span></td>
			    <?php 
			    }
			    ?>
   			</tr>
		<?	
			  	$i++;
		  	}
		?>
		</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você esta colocando os dados da consulta numa sessão para que seja passadas de uma pagina pra outra?

 

pode ser que na primeira pagina os dados da consulta estejam lá, mas quando você muda de pagina ele perde os dados da consulta. verifique isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema foi resolvido utilizando sessão. Armazeno durante a pesquisa e reseto a sessão caso a pessoa faça uma nova busca ou clique no link da página. O que eu queria era não utilizar sessão mas sim utilizar os parametros pela url.

 

você esta colocando os dados da consulta numa sessão para que seja passadas de uma pagina pra outra?

 

pode ser que na primeira pagina os dados da consulta estejam lá, mas quando você muda de pagina ele perde os dados da consulta. verifique isso.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.