2010-07-30 8 views
0

J'essaye d'implémenter la pagination dans le xml en utilisant this code et ai marché pour le faire fonctionner. Bien que cela fonctionne parfaitement, il y a un petit problème, quand je clique sur le bouton NEXT, il continue de recharger la page avec les mêmes enregistrements initiaux. il ne prend pas l'utilisateur à la page suivante.en passant des paramètres en xml

Je suis tombé sur this link dans lequel l'affiche avait un problème similaire, et il semble que les paramètres de réponses doivent être transmis. cependant, le gars de ce lien utilisait MM_XSLTransform, alors que je ne le suis pas. par conséquent, lorsque je tente de mettre en œuvre ce code dans index.php:

$xsl->addParameter("Page", $_GET["Page"]); 
$xsl->addParameter("PageSize", $_GET["PageSize"]); 

il renvoie une erreur:

Fatal error: Call to undefined method XSLTProcessor::addParameter() 

MISE À JOUR

code php:

<?php 
     error_reporting(E_ALL); 
     ini_set("display_errors", 1); 

      $xmldoc = new DOMDocument(); 
      if(!file_exists('test.xml')){ 
       echo "Sorry this file does not exists!"; 
       exit(); 
      } else { 
       $xmldoc->load('test.xml', LIBXML_NOBLANKS); 

       // Load up the XSL file 
       $xslDoc = new DomDocument; 
       $xslDoc->load("test.xsl"); 
       $xsl = new XSLTProcessor; 
       $xsl->importStyleSheet($xslDoc); 

       $xsl->setParameter(null, 'Page', $_GET['Page']); 
       $xsl->setParameter(null, 'PageSize', $_GET['PageSize']); 

       // apply the transformation 
       echo $xsl->transformToXml($xmldoc); 

      } 
?> 

xsl :

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" /> 

<!-- XML Parameters --> 
<xsl:param name="Page" select="0" /> 
<xsl:param name="PageSize" select="5" /> 

<xsl:template match="/"> 

<xsl:variable name="mycount" select="count(root/verse)"/> 
<xsl:variable name="selectedRowCount" select="floor((number($mycount)-1) div $PageSize)+1"/> 

<div> 
    <div> 
     <xsl:value-of select="root/title"/> 
    </div> 
    <div> 
     <p><xsl:value-of select="root/introduction"/></p> 
    </div> 
    <div> 

      <xsl:for-each select="root/verse"> 

       <xsl:if test="position() &gt;= ($Page * $PageSize) + 1"> 
       <xsl:if test="position() &lt;= $PageSize + ($PageSize * $Page)"> 

        <div><xsl:value-of select="p"/></div> <br /> 
        <div><xsl:value-of select="trla"/></div> <br /> 
        <div><xsl:value-of select="trli"/></div> <br /> 

       </xsl:if> 
       </xsl:if> 
      </xsl:for-each> 


      <!-- Prev link for pagination --> 
       <xsl:choose> 
       <xsl:when test="number($Page)-1 &gt;= 0">&#160; 
       <A> 
       <xsl:attribute name="href">index.php?page=<xsl:value-of select="number($Page)-1"/>&amp;pagesize=<xsl:value-of select="$PageSize"/></xsl:attribute> 
        &lt;&lt;Prev 
       </A> 
       </xsl:when> 
       <xsl:otherwise> 
       <!-- display something else --> 
       </xsl:otherwise> 
       </xsl:choose> 

       <xsl:if test="$selectedRowCount &gt; 1"> 
       &#160;<b class="blacktext"><xsl:value-of select="number($Page)+1"/>&#160;of&#160;<xsl:value-of select="number($selectedRowCount)"/></b>&#160; 
       </xsl:if> 

       <!-- Next link for pagination --> 
       <xsl:choose> 
       <xsl:when test="number($Page)+1 &lt; number($selectedRowCount)">&#160; 
       <A> 
       <xsl:attribute name="href">index.php?page=<xsl:value-of select="number($Page)+1"/>&amp;pagesize=<xsl:value-of select="$PageSize"/></xsl:attribute> 
        Next&gt;&gt; 
       </A> 
       </xsl:when> 
       <xsl:otherwise> 
       <!-- display something else --> 
       </xsl:otherwise> 
       </xsl:choose> 

    </div> 

</div> 

</xsl:template> 
</xsl:stylesheet> 
+0

Vous avez vraiment besoin d'ajouter la langue aux tags, et quel processeur xslt vous utilisez. Ils ont des différences et il est important de savoir lequel est quoi. – Oded

+0

merci pour le pointeur. J'utilise le processeur php xslt intégré. – input

Répondre

2

Jetez un oeil à la documentation of the xsl module. Vous trouverez une méthode set.

éditer: par exemple.

<?php 
$doc = new DOMDocument; 
$doc->loadxml('<a />'); 
$proc = getProcessor(); 
$proc->setParameter(null, 'Page', '99'); 
$proc->setParameter(null, 'PageSize', '11'); 
echo $proc->transformToXML($doc); 

function getProcessor() { 
    $doc = new DOMDocument; 
    $doc->loadxml('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:param name="Page" select="0" /> 
    <xsl:param name="PageSize" select="1" /> 
    <xsl:template name="results" match="/"> 
     Page: <xsl:value-of select="$Page" /> 
     PageSize: <xsl:value-of select="$PageSize" /> 
    </xsl:template> 
    </xsl:stylesheet>'); 
    $xsl = new XSLTProcessor(); 
    $xsl->importStyleSheet($doc); 

    return $xsl; 
} 

impressions

Page: 99 
PageSize: 11 

Edit2: Essayez

<?php 
$page = isset($_GET['Page']) ? intval($_GET['Page']) : 0; 

$proc = getProcessor(); 
$proc->setParameter(null, 'Page', $page); 
$proc->setParameter(null, 'PageSize', '11'); 
$doc = getDoc(); 
echo $proc->transformToXML($doc); 

function getProcessor() { 
    $doc = new DOMDocument; 
    $doc->loadxml('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" /> 
    <xsl:param name="Page" select="0" /> 
    <xsl:param name="PageSize" select="1" /> 
    <xsl:template name="results" match="/"> 
     Page: <xsl:value-of select="$Page" /> 
     PageSize: <xsl:value-of select="$PageSize" /> 
     <hr /> 
     <a><xsl:attribute name="href">?Page=<xsl:value-of select="($Page)-1" /></xsl:attribute>Prev</a> 
     | 
     <a><xsl:attribute name="href">?Page=<xsl:value-of select="($Page)+1" /></xsl:attribute>Next</a> 
    </xsl:template> 
    </xsl:stylesheet>'); 
    $xsl = new XSLTProcessor(); 
    $xsl->importStyleSheet($doc); 

    return $xsl; 
} 

function getDoc() { 
    $doc = new DOMDocument; 
    $doc->loadxml('<a></a>'); 
    return $doc; 
} 

EDIT3: Dans votre code, vous avez

index.php?page=<xsl:value-of select="number($Page)-1"/> 

Utilisez $ _GET ['p age'] au lieu de $ _GET ['P age'] ou remplacez le modèle par index.php?Page=<xsl:value .... Même chose avec PageSize/pageize.

+0

+1 pour être rapide là-bas. – Sarfraz

+0

J'ai essayé ça. il renvoie cette erreur: 'Undefined index: Page' et' nombre de paramètres incorrect pour XSLTProcessor :: setParameter() ' – input

+0

Vous n'avez probablement pas lu la documentation mais simplement remplacé' add' par 'set'. Voir l'exemple Et l'avis 'Undefined index: Page' signifie très probablement qu'il n'y a pas de paramètre GET' Page'. – VolkerK

Questions connexes