Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá galera, estou tendo problema em ler um arquivo XML muito grande, a pagina fica muito extensa e dificulta muito a visualização, eu tenho o código para a leitura do aquivo XML em PHP e gostaria de limitar a quantidade de conteúdo por pagina colocando links de paginação.
Código que uso:
<?php
// permite requisições a urls externas
ini_set('allow_url_fopen', 1);
ini_set('allow_url_include', 1);
// caminho do feed
$urls[] = 'http://news.google.com.br/news?pz=1&cf=all&ned=pt-BR_br&hl=pt-BR&output=rss';
foreach($urls as $feed){
// leitura do feed
$rss = simplexml_load_file($feed);
// limite de itens
$limit = 100;
// contador
$count = 0;
// imprime os itens do feed
if($rss)
{
foreach ( $rss->channel->item as $item )
{
// formata e imprime o titulo do conteudo
printf('<a href="%s" title="%s" >%s</a><br>', $item->link, $item->title, $item->title);
// imprime a descrição do conteudo
echo "<tr><td>". ($item->description)."</td></tr><br>";
// imprime data e hora formatados
echo "<tr><td>". ($item->pubDate)."</td></tr><br>";
// incrementamos a variável $count
$count++;
// caso nosso contador seja igual ao limite paramos a iteração
if($count == $limit) break;
}
}
else
{
echo 'Não foi possível acessar o xml.';
}
}
?><<Anterior 1 2 3 4 5 Próxima>>
Eu sei fazer paginação usando Banco de dados MySQL, só estou tendo dificuldade usando o XML.
Se alguém puder me ajudar, ficarei muito agradecido.
Andei testando o código que você mandou mangakah e quase deu certo, passou perto, o erro que eu obtive foi, na pagina logo quando a xml é carregada 'www.meudominio.com/xml' não aparece nada, fica e branco, mas na pagina 'www.meudominio.com/xml?page=1' aparece apenas 1 (uma) noticias, a primeira apenas, e nas paginas ?page=2 em diante a mesma noticia da pagina 1 se repete.
Aqui o meu código que usei junto com o código que você me mandou
<?php
// permite requisições a urls externas
ini_set('allow_url_fopen', 1);
ini_set('allow_url_include', 1);
// Identificar a página atual, vinda de ?page=INTEIRO
// veridica se ?page existe e se é um número, caso contrário, o num. da página é 1
$page = (int) (isset($_GET['page']) and ctype_digit($_GET['page']) ? $_GET['page'] : 1);
// Itens por página, no caso, apenas 2
$rpp = 2;
// calcular o inicio da impressão, com base na página e rpp
$offset = ($page * $rpp) - $rpp;
/*
Na página 1, o offset será: 1 * 2 - 2 = 0;
Na página 2: 2 * 2 - 2 = 2;
E assim por diante...// caminho do feed
$urls[] = 'http://news.google.com.br/news?pz=1&cf=all&ned=pt-BR_br&hl=pt-BR&output=rss';
foreach($urls as $feed){
// leitura do feed
$rss = simplexml_load_file($feed);
// limite de itens
$limit = 100;
// contador
$count = 0;
// imprime os itens do feed
if($rss)
{
foreach ( $rss->channel->item as $item )
{
// Se ainda tiver offset, então pule esse item
if ($offset) {
continue;
}
$offset--;
// formata e imprime o titulo do conteudo
printf('<a href="%s" title="%s" >%s</a><br>', $item->link, $item->title, $item->title);
// imprime a descrição do conteudo
echo "<tr><td>". ($item->description)."</td></tr><br>";
// imprime data e hora formatados
echo "<tr><td>". ($item->pubDate)."</td></tr><br>";
}
}
else
{
echo 'Não foi possível acessar o xml.';
}
}
?>Desculpa ae... confundi algumas coisas, agora pelo menos deve funcionar melhor, mas ainda tem um problema com a últma página:
<?php
// permite requisições a urls externas
ini_set('allow_url_fopen', 1);
ini_set('allow_url_include', 1);
// Identificar a página atual, vinda de ?page=INTEIRO
// veridica se ?page existe e se é um número, caso contrário, o num. da página é 1
$page = ((isset($_GET['page']) and ctype_digit($_GET['page'])) ? (int) $_GET['page'] : 1);
// Itens por página, no caso, apenas 2
$rpp = 2;
// calcular o inicio da impressão, com base na página e rpp
$offset = ($page * $rpp) - $rpp;
/*
Na página 1, o offset será: 1 * 2 - 2 = 0;
Na página 2: 2 * 2 - 2 = 2;
E assim por diante...// caminho do feed
$urls[] = 'http://news.google.com.br/news?pz=1&cf=all&ned=pt-BR_br&hl=pt-BR&output=rss';
foreach($urls as $feed){
// leitura do feed
$rss = simplexml_load_file($feed);
// limite de itens
$limit = $rpp;
// contador
$count = 0;
// imprime os itens do feed
if($rss)
{
foreach ( $rss->channel->item as $item )
{
// Se ainda tiver offset, então pule esse item
if ($offset) {
$offset--;
continue;
}
// formata e imprime o titulo do conteudo
printf('<a href="%s" title="%s" >%s</a><br>', $item->link, $item->title, $item->title);
// imprime a descrição do conteudo
echo "<tr><td>". ($item->description)."</td></tr><br>";
// imprime data e hora formatados
echo "<tr><td>". ($item->pubDate)."</td></tr><br>";
$count++;
if($count == $limit) {
break;
}
}
//paginação
if ($page > 1) {
echo '<a href="?page=' . ($page - 1) . '">« Anterior</a>';
}
echo " | ";
echo '<a href="?page=' . ($page + 1) . '">» Próxima</a>';
}
else
{
echo 'Não foi possível acessar o xml.';
}
}Vlw cara, funcionou certinho, obrigado, o erro que você mencionou foi da ultima pagina aparecer em branco né ? se for esse o erro eu sei como corrigir, então obrigado de novo e abraços.
É a mesma coisa...
Além de usar um contador de registros já impressos, você tem que também usar um "pulador", que será decrementado a cada iteração e a impressão só iniciará quando estiver zerado.
// Identificar a página atual, vinda de ?page=INTEIRO
// veridica se ?page existe e se é um número, caso contrário, o num. da página é 1
$page = (int) (isset($_GET['page']) and ctype_digit($_GET['page']) ? $_GET['page'] : 1);
// Itens por página, no caso, apenas 2
$rpp = 2;
// calcular o inicio da impressão, com base na página e rpp
$offset = ($page * $rpp) - $rpp;
/*
*/
Quanto a navegação, basta incrementar/decrementar o número da página para próximo e anterior...
Obs.: não testei o código acima, digitei aqui no fórum mesmo, só pra te passar a ideia. Então podem haver erros de sintaxe.