2013-06-28 3 views
-4

Je suis le code ci-dessous pour diviser les pages:Ajout de pages XML

$files = glob('docs/*.xml'); 
$files = array_slice($files, ($page-1)*10, 10); 
foreach ($files as $file){ 
$xml = new SimpleXMLElement($file, 0, true); 
echo' 
    <tr> 
    <td>' . $xml->doctype . '</td> 
    <td><a href="viewdoc.php?docname=' . basename($file, '.xml') . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename($file, '.xml') . '</a></td> 
    <td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td> 
    <td>'. $xml->date .'</td> 
    <td>* * * * *</td> 
    <td></td> 
    </tr> 
    '; 
} 

Mais maintenant, je ne sais pas comment puis-je ajouter des liens de pages (tel que 1 2 3 4 Next) à ce code j'ai pensé à ajouter ++ à variable mais cela n'a pas fonctionné pour moi.

Ma question est comment puis-je ajouter des liens de pages en boucle?

Merci d'avance.

EDIT: J'ai oublié de vous dire tous les trucs en écho suppost être la page (10 fichiers en 1 page)

<ul> 
    <li>1</li> 
    <li>2</li> 
    <li>3</li> 
    <li>Next</li> 
</ul> 
+1

Je suggère d'apprendre XLST. –

+0

Je voudrais utiliser du XML simple, mais si vous avez une réponse pour moi, dans n'importe quelle langue de la famille XML, j'aimerais cela. – copypaste

+0

SimpleXML est, IMO, pour des cas d'utilisation vraiment triviaux. Je suppose que votre application va grandir avec le temps et coller avec SimpleXMLElement deviendra une douleur. Essayez XSLT, et si vous l'aimez, c'est un plaisir de travailler avec. Surtout :) –

Répondre

1

Vous pouvez le faire dans XSLT, mais il n'y a pas de raison d'introduire une autre langue quand vous avez juste besoin d'un simple pager dans votre sortie. Je vais supposer pendant un moment que la variable $page est définie correctement ailleurs dans votre code.

$perpage = 10; // Avoid magic numbers 
$files = glob('docs/*.xml'); 
$file_count = count($files); 
$pages = $file_count/$perpage; 
$files = array_slice($files, ($page-1)*$perpage, $perpage); 
foreach ($files as $file){ 
$xml = new SimpleXMLElement($file, 0, true); 
echo' 
    <tr> 
    <td>' . $xml->doctype . '</td> 
    <td><a href="viewdoc.php?docname=' . basename($file, '.xml') . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename($file, '.xml') . '</a></td> 
    <td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td> 
    <td>'. $xml->date .'</td> 
    <td>* * * * *</td> 
    <td></td> 
    </tr> 
    '; 
} 
?> 
<ul> 
<?php 
for($i=1; $i<=$pages; $i++) {?> 
    <li><a href="link_to_page.php?page=<?php echo $i?>"><?php echo $i?></a></li> 
<?php } ?> 
</ul> 
+0

Merci, la prime récompensée dès que possible .. – copypaste

+0

Je crains que ce soit un petit bug, puisque je ne peux pas prévisualiser la page si j'ai 20 fichiers et je ne peux pas voir la deuxième page si J'ai 11 fichiers, pouvez-vous modifier le code pour que cela fonctionne? Merci @acrosman – copypaste

+0

StackOverflow n'est pas là pour écrire tout le code pour vous. Très probablement, cela a à voir avec la gestion de $ page. Comme je l'ai noté ci-dessus, je suppose que vous gérez cet endroit.Je ne retire pas la variable $ page du paramètre $ _GET, n'assure pas une bonne valeur minimale, évite les erreurs hors-un (probablement ce que vous voyez), ou confirme que c'est même un nombre. C'est ton boulot. – acrosman

1

Convertir un commentaire à une réponse.

Je suggère d'utiliser XSLT. Après tout, il a été développé pour exactement le but que vous avez - convertir du XML en un autre XML, ou, en général, en un texte.

PHP a quite usable implementation, et vous aurez l'avantage d'un modèle externalisé - c'est-à-dire sans mélange de code PHP et HTML.

Vous résolvez la pagination. Cela peut être réalisé en utilisant la fonction document(...), ce qui vous donne une liste de nœuds de documents XML, que vous pouvez utiliser comme:

<ul> 
<xsl:foreach select="$paths"> 
    <li><xsl:value-of select="position()"/></li> 
<ul> 

environ. Le $paths est un paramètre du modèle XSLT, transmis depuis PHP.

+0

Je suis désolé de ne pas comprendre, mais quelle position()? – copypaste

+0

J'ai édité mon code (ajoutez le HTML) ainsi vous pouvez m'aider sur mon propre code. – copypaste

+0

'position()': http://stackoverflow.com/questions/93511/counter-inside-xslfor-each-loop –