2010-07-30 72 views
0

我試圖在xml中使用this code實現分頁,並着手使其工作。雖然它完美的工作,但有一個小問題,即當我點擊NEXT按鈕時,它會使用相同的初始記錄重新加載頁面。它不會將用戶帶到下一頁。在xml中傳遞參數

我遇到了this link其中海報有類似的問題,它似乎從答案參數需要通過。然而,該鏈接中的人使用MM_XSLTransform,而我不是。因此,當我嘗試實現這個代碼的index.php:

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

它拋出一個錯誤:

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

修訂

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

您確實需要將語言添加到標籤以及您正在使用的xslt處理器。他們有分歧,重要的是要知道哪個是哪個。 – Oded 2010-07-30 20:54:49

+0

感謝您的指針。我正在使用內置的php xslt處理器。 – input 2010-07-30 21:12:39

回答

2

看一看documentation of the xsl module。你會發現一個集合參數方法。

編輯:例如

<?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; 
} 

打印

Page: 99 
PageSize: 11 

EDIT2:嘗試

<?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:在你的代碼有

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

使用$ _GET ['p age']而不是$ _GET ['P age']或將模板更改爲index.php?Page=<xsl:value ...。與PageSize/pagesize相同。

+0

+1爲快速在那裏。 – Sarfraz 2010-07-30 21:01:00

+0

我試過了。它會拋出這個錯誤:'未定義的索引:Page'和'錯誤的參數數量爲XSLTProcessor :: setParameter()' – input 2010-07-30 21:10:28

+0

你可能還沒有閱讀文檔,只是用'set'替換'add'。看例子。而'Undefined index:Page'通知很可能意味着沒有GET參數'Page'。 – VolkerK 2010-07-30 21:31:32