2010-07-30 8 views
0

this code을 사용하여 xml에서 페이징을 구현하려고하는데 작동하게 만들었습니다. 그것이 완벽하게 작동하는 동안 작은 문제가 있습니다. NEXT 버튼을 클릭하면 페이지가 동일한 초기 레코드로 다시로드됩니다. 사용자는 다음 페이지로 이동하지 않습니다.xml의 매개 변수 전달

포스터에 비슷한 문제가있는 this link이 나타 났으며 응답 매개 변수에서 전달해야하는 것으로 보입니다. 그러나 그 링크의 녀석은 MM_XSLTransform을 사용하고 있었지만 나는 그렇지 않았습니다. 내가 index.php에이 코드를 구현하려고 할 때 따라서 :

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

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

이 오류가 발생합니다 :

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

+0

포인터 감사합니다. 내가 내장 된 PHP xslt 프로세서를 사용하고 있습니다. – input

답변

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

+0

나는 그것을 시험해 보았다. 'Undefined index : Page'와'XSLTProcessor :: setParameter()'의 잘못된 매개 변수 개수 – input

+0

아마도이 문서를 읽지 않았을 뿐이며'set'으로'add'를 대체했을 것입니다. 예제를 참조하십시오. 'Undefined index : Page'는 GET 매개 변수'Page'가 없다는 것을 의미합니다. – VolkerK