Jump to content


Photo

[resolvido] Lógica Da Paginação.


  • Faça o login para participar
10 replies to this topic

#1 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 02/08/2007, 11:27

Olá pessoal.

Tenho que fazer uma paginação aqui muito da dinâmica:

Digamos q eu tenha 20 páginas, mostrando todas ficaria assim

1	2	3	4	5	6	7	8	9	10	11	12	13	14	15	16	17	18	19   20

Gostaria de mostrar as 5 primeiras e as 5 últimas páginas.
for ($i = 1; $i <= 20; $i++) {
		 if ($i <= 5 || $i > 15)
			 echo $i . " ";
		 else
			 echo ".";
	 }

Mostra

1	2   3	4	5	.	.	.	.	.	.	.	.	.   .	16	17	18	19	20


Tá isso é simples
Problema é que quando a página for 2 por exemplo teria que mostrar assim:

2   3	4	5   6	.	.	.	.	.	.	.	.   .	16	17	18	19	20

E assim sucessivamente.

Só não consigo fazer isso de paginar quando está numa página maior de 1.

Alguem pode ajudar com a lógica?

[]'s (y)

Edição feita por: savior, 03/08/2007, 16:03.

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#2 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 02/08/2007, 12:34

$pag_atual = 3
if ($i <= ($pag_atual+5) || $i > ($pag_atual+15))

Num é assim ?! <_<
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...

#3 Petry

Petry

    Veterano

  • Usuários
  • 1132 posts
  • Sexo:Masculino
  • Localidade:Caxias do Sul - RS
  • Interesses:- desenvolvimento WEB<br />- websemântica<br />- microformatos

Posted 02/08/2007, 14:24

seria isso?
<?php
$total = 20;
$atual = 1;
$exibe = 5;

for($i = $atual; $i <= $total; $i++){
   if ($i <= $atual+$exibe-1 || $i > $total - $exibe){
	   echo $i . " ";
   }else {
	   echo ". ";
   }
}
?>

Posted Image

- Desenvolvedor Python/ZOPE/Plone + ArchGenXML/Poseidon - Python + Django na Universidade de Caxias do Sul
- Desenvolvedor Python + Django na World News

Blog

#4 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 02/08/2007, 14:41

Eu me expressei errado no começo ali, lógica furada <_<''''

$pag_atual = 3
  if ($i <= ($pag_atual+5) || $i > ($pag_atual+15))

Num é assim ?! <_<



seria isso?

<?php
  $total = 20;
  $atual = 1;
  $exibe = 5;
  
  for($i = $atual; $i <= $total; $i++){
	 if ($i <= $atual+$exibe-1 || $i > $total - $exibe){
		 echo $i . " ";
	 }else {
		 echo ". ";
	 }
  }
  ?>


Obrigado aos dois (:
Poderiam só ter passado a lógica que tava bom, se não foge do foco deste fórum.

Fiz assim tb logo depois que eu postei o tópico, mas o problema é que tipw se eu estou na pagina 16, só aparece as paginas finais ... e as inicias nada ;x
Eu preciso sempre estar mantendo digamos as 5 primeiras e as 5 ultimas, ou seja sempre 10 páginas.
Se ele está nas ultimas tem que aparecer as anteriores a ele ...

pg = 19.
4	5	6	7	8	.	.	.	.   .	14	15	16	17	18	[19]	20

pg = 9
5	6	7	8	[9]	.	.	.	.	.   .   16	17	18	19	20

pg = 2
1	[2]	3	4	5	 .	.	.	.	.	16	17	18	19	20

Vai ter q ter sempre um intervalo de '5 pontinhos'

Algo assim, sacam?
Se ficar muito complexo, vou utilizar a lógica do petry.

(y)

Edição feita por: savior, 02/08/2007, 14:42.

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#5 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 02/08/2007, 14:48

Hummm, entendo .. o buraco é mais embaixo.

Responde uma coisa então ... e se a página tiver 3 páginas de resultado ? Fica 1 | 2 | 3 ou vai colocar os pontinhos no meio ? 1 | 2 . . . . . 3 ?
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...

#6 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 02/08/2007, 15:09

É bem mais embaixo ... UI!

Até a 5 mantem o negócio como expliquei no ultimo code que fiz

pg = 3
1	2	[3]	4	5	 .	.	.	.	.	16	17	18	19	20

Porem se pg = 18
6   7   8   9   10   .	.	.	.	.	16	17	[18]	19	20


Complicado :S

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#7 Petry

Petry

    Veterano

  • Usuários
  • 1132 posts
  • Sexo:Masculino
  • Localidade:Caxias do Sul - RS
  • Interesses:- desenvolvimento WEB<br />- websemântica<br />- microformatos

Posted 02/08/2007, 16:31

sei lah cara axhei meio confusa essa paginação ai... nau machei uma padrão nela, sei lah... pq vc naum faz ela exibir sempre a atual página no centro e da 5 páginas antes e 5 págians depois algo como:

<< 8 9 10 11 12 [13] 14 15 16 17 18 >>


e s flechinhas seriam link para os primeiros e ultimos registro... axo mto + intuitivo! (y)

Posted Image

- Desenvolvedor Python/ZOPE/Plone + ArchGenXML/Poseidon - Python + Django na Universidade de Caxias do Sul
- Desenvolvedor Python + Django na World News

Blog

#8 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 02/08/2007, 16:34

sei lah cara axhei meio confusa essa paginação ai... nau machei uma padrão nela, sei lah... pq vc naum faz ela exibir sempre a atual página no centro e da 5 páginas antes e 5 págians depois algo como:

<< 8 9 10 11 12 [13] 14 15 16 17 18 >>


e s flechinhas seriam link para os primeiros e ultimos registro... axo mto + intuitivo! (y)




Pus eh ... por isso postei aqui
Tb não achei um padrão.
Vou ter que optar por esse modo, só queria deixar bonitinho, queria fazer uma paginação igual a do google, mas sem aumentar a exibição das páginas, colocava só pontinhos no lugar.

Atualmente está do jeito que você citou petry ^^

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#9 Petry

Petry

    Veterano

  • Usuários
  • 1132 posts
  • Sexo:Masculino
  • Localidade:Caxias do Sul - RS
  • Interesses:- desenvolvimento WEB<br />- websemântica<br />- microformatos

Posted 02/08/2007, 17:07

ehhehe mas a paginação do google tem padrão!!

olha soh a paginação do google eh igual a q eu te recomendei por ultimo, soh que eles tem + págianas para exibir antes e no fim e em vez de numeros eles colocam a letra "O"

Posted Image

- Desenvolvedor Python/ZOPE/Plone + ArchGenXML/Poseidon - Python + Django na Universidade de Caxias do Sul
- Desenvolvedor Python + Django na World News

Blog

#10 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 02/08/2007, 17:40

De fato, apesar de usar o google a anos eu nunca tinha reparado na paginação ... ^^

Acho que é por isso que eu não conseguia achar mais de 10 resultados, mesmo buscando palavras como "mulher pelada" ...

E concordo com o petry, a deles segue o padrão que ele colocou ... mas não tem esse monte de ponto no meio que você queria.
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...

#11 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 03/08/2007, 16:02

Consegui fazer algo com utilizando arrays >.<

$arr = array();
	$max = 20;
	$exibe = 10;
	$pg = isset($_GET['pg']) ? $_GET['pg'] : 1;

	for ($i = 1; $i <= $max; $i++) {
		$arr[] = "<a href=\"?pg=" . $i . "\">" . $i . "</a>";
	}

	$offset = $pg;
	if (($max - $pg) < $exibe)
		$offset = $offset - ($offset - $exibe) + 1;

	echo "Pagina => " . $pg . "<br />";
	echo "Offset => " . $offset . "<br />";

	$arr2 = array_slice($arr, $offset - 1,$exibe);

	echo "<pre>";
	print_r ($arr2);
	echo "</pre>";

Ele mantem as 10 paginas, mesmo quando a pagina é maior que o numero de exibições. Ele mantem o numero de exibição.

problema que não posso usar array na paginação, faço ela via smarty >_>'

:)

Congui fazer >.<
podem fechar o tópico por favor?

(y)

Edição feita por: savior, 03/08/2007, 14:49.

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq