Question

J'ai le XSLT suivant:

<xsl:template match="/">        
  <div id="dokumentliste">
    <xsl:variable name="alleNyheder" select="$currentPage//node" />

    <xsl:for-each select="$alleNyheder">
    <xsl:sort data-type="text" select="@createDate" order="descending" />            

        <xsl:if test="./data[@alias='manchet'] != ''">
            <div class="newsitem">
                <h2>
                    <xsl:value-of select="./data[@alias='title']"/>
                </h2>

                <xsl:if test="./data[@alias = 'manchet'] != ''">
                    <div class="nyhedContent">
                        <p>
                            <span class="dokumentListeDato">
                                <xsl:choose>
                                    <xsl:when test="./data[@alias='date'] != ''">
                                        <xsl:value-of select="umbraco.library:FormatDateTime(./data[@alias='date'], 'dd. MMMM yyyy')"/>
                                    </xsl:when>
                                    <xsl:otherwise>
                                        <xsl:value-of select="umbraco.library:FormatDateTime(./@createDate, 'dd. MMMM yyyy')"/>
                                    </xsl:otherwise>
                                </xsl:choose>
                            </span>
                            <xsl:value-of select="./data[@alias = 'manchet']"/>
                        </p>
                    </div>
                </xsl:if>
                <div class="dokumentListe_laes_mere">
                    <a href="{umbraco.library:NiceUrl(@id)}">
                        Læs mere<img src="/frontend/images/macro/macro_laes_mere.png" alt="Læs mere"/>
                    </a>
                </div>
            </div>
            <!-- End newsitem -->
        </xsl:if>
      </xsl:for-each>
   </div> 
 </xsl:template>

Je fais un newslist et j'aimerais faire une sorte de pagination. Presque le même que celui vu sur Google. Vous connaissez "l'habituel".

Mais je n'arrive pas à comprendre comment faire cela.

Le nombre d'articles sur chaque page n'est pas si important que cela, mais disons 10 sur chaque page. Lorsque les 10 premiers articles sont diffusés, j'aimerais que la pagination apparaisse. Avec le " Suivant " et " Précédent " boutons à droite et à gauche des chiffres.

Est-il possible de le faire, et ai-je expliqué mon problème assez bon? J'utilise le CMS Umbraco en passant:)

Merci beaucoup.

-Kim

Était-ce utile?

La solution

Quelque chose comme ça: J'ai également laissé du code pour traiter les images dans votre liste: -)

<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:param name="currentPage"/>
<xsl:template match="/">
    <xsl:variable name="recordsPerPage" select="2"/>
    <xsl:variable name="pageNumber">
        <xsl:choose>
            <!-- first page -->
            <xsl:when test="umbraco.library:RequestQueryString('page') &lt;= 0 or string(umbraco.library:RequestQueryString('page')) = '' or string(umbraco.library:RequestQueryString('page')) = 'NaN'">0</xsl:when>
            <!-- what was passed in -->
            <xsl:otherwise>
                <xsl:value-of select="umbraco.library:RequestQueryString('page')"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:variable>
    <xsl:variable name="numberOfRecords" select="count($currentPage/node)"/>

    <!-- The fun starts here -->

    <xsl:call-template name="pagination">
        <xsl:with-param name="pageNumber" select="$pageNumber"/>
        <xsl:with-param name="recordsPerPage" select="$recordsPerPage" />
        <xsl:with-param name="numberOfRecords" select="$numberOfRecords" />
    </xsl:call-template>

<ul class="listing self-clear">
        <xsl:for-each select="$currentPage/node [string(data [@alias='umbracoNaviHide']) != '1']">
            <xsl:sort order="descending" select="data[@alias='releasedOn']"></xsl:sort>

            <xsl:if test="position() &gt; $recordsPerPage * number($pageNumber) and position() &lt;= number($recordsPerPage * number($pageNumber) + $recordsPerPage )">
                <li>
                    <xsl:attribute name="class">
                        <xsl:if test="data[@alias='image'] = ''">
                            no-img
                        </xsl:if>
                        <xsl:if test="position() = $recordsPerPage * (number($pageNumber) + 1)">
                            last
                        </xsl:if>
                    </xsl:attribute>
                    <h3>
                        <a href="{umbraco.library:NiceUrl(@id)}">
                            <xsl:value-of select="@nodeName"/>
                        </a>
                    </h3>
                    <xsl:if test="data[@alias='image'] != ''">
                        <img src="{data[@alias='image']}" class="drop-shadow" />
                    </xsl:if>
                    <p class="date"><xsl:value-of select="umbraco.library:LongDate(data[@alias='releasedOn'])"/></p>
                    <xsl:value-of select="data[@alias='abstract']" disable-output-escaping="yes"/>
                    <a href="{umbraco.library:NiceUrl(@id)}" class="read-more">Read More</a>
                </li>
            </xsl:if>
        </xsl:for-each>
    </ul>

    <xsl:call-template name="pagination">
        <xsl:with-param name="pageNumber" select="$pageNumber"/>
        <xsl:with-param name="recordsPerPage" select="$recordsPerPage" />
        <xsl:with-param name="numberOfRecords" select="$numberOfRecords" />
    </xsl:call-template>

</xsl:template>

<xsl:template name="pagination">
    <xsl:param name="pageNumber"/>
    <xsl:param name="recordsPerPage"/>
    <xsl:param name="numberOfRecords"/>

    <div class="pagination">
    <div class="wrapper">

        <xsl:if test="(($pageNumber +1 ) * $recordsPerPage) &lt; ($numberOfRecords)">
            <a href="?page={$pageNumber +1}" class="next">Next</a>
        </xsl:if>

        <xsl:if test="$pageNumber &gt; 0">
            <a href="?page={$pageNumber -1}" class="prev">Prev</a>
        </xsl:if>

        <span class="page-nos">
        Page
        <xsl:call-template name="for.loop">
            <xsl:with-param name="i">1</xsl:with-param>
            <xsl:with-param name="page" select="$pageNumber +1"></xsl:with-param>
            <xsl:with-param name="count" select="ceiling(count($currentPage/node)div $recordsPerPage)"></xsl:with-param>
        </xsl:call-template>
        </span>

    </div>
    </div>
</xsl:template>

<xsl:template name="for.loop">
    <xsl:param name="i"/>
    <xsl:param name="count"/>
    <xsl:param name="page"/>
    <xsl:if test="$i &lt;= $count">
        <span>
        <xsl:if test="$page != $i">
            <a href="{umbraco.library:NiceUrl($currentPage/@id)}?page={$i - 1}" >
                <xsl:value-of select="$i" />
            </a>
        </xsl:if>
        <xsl:if test="$page = $i">
            <xsl:value-of select="$i" />
        </xsl:if>
        </span>
    </xsl:if>

    <xsl:if test="$i &lt;= $count">
        <xsl:call-template name="for.loop">
            <xsl:with-param name="i">
                <xsl:value-of select="$i + 1"/>
            </xsl:with-param>
            <xsl:with-param name="count">
                <xsl:value-of select="$count"/>
            </xsl:with-param>

            <xsl:with-param name="page">
                <xsl:value-of select="$page"/>
            </xsl:with-param>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

Autres conseils

J'ai compris celui-ci maintenant. Je vois que vous venez de copier / coller la pagination faite par Tim Geyssens ici: http: / /www.nibble.be/?p=11

Et le code est bon aussi, mais j’en ai changé quelques-uns pour le faire fonctionner. Je ne sais pas si je devrais accepter ma propre réponse comme étant la bonne, la réponse de Myster comme étant la bonne ou si je peux supprimer ce message?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top