IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

Pagination xsl


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut Pagination xsl
    Bonjour,

    je suis novice dans le XSL , j'ai réaliser un code XSL qui me transforme des donnée xml ( 2000 personne avec leurs noms et prenoms ect ... )
    la template que j'ai realiser permet d'afficher les donnée dans un tableau html , mon probleme reste dans la pagination puisque j'ai beaucoup de personnes a afficher
    donc je veux savoir comment je peux faire la pagination sure ma page
    vois le code du XSL qui m'affiche parfaitement le tableau html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="no" encoding="ISO-8859-1"/>
    		<xsl:template match="/">
    			<xsl:apply-templates select="annuaire"/>
    		</xsl:template>
    <xsl:template match="annuaire">
    	<html><head><title>Annuaire</title>
    	</head><body><h1>Annuaire</h1>
    	<xsl:value-of select="count(personne)"/> 
    	personnes dans l'annuaire.	
    	<table border="1"><tr bgcolor="#C0C0C0">
    	<th>ID</th>	<th>Nom</th>
    	<th>Specialite</th>
    	<th>Adresse</th></tr>
    	<xsl:apply-templates select="personne"/>
    	</table>
    	</body>	
    	</html>
    </xsl:template>
    j'ai trouvé quelques code de pagination seulement je sais pas comment integrer le mien voici le lien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    <!-- Définition du nom du template -->
    <xsl:template name="boucle">
     
        <!-- Les paramètres -->
        <xsl:param name="pageToShow"/><!-- Page à afficher -->
        <xsl:param name="currentPage"/><!-- Page en cours -->
        <xsl:param name="max"/><!-- Nombre total de pages -->
        <xsl:param name="windowSize"/><!-- Nombre de pages à afficher avant / après -->
        <xsl:param name="displayLeftDots"/><!-- Est-ce que les '...' ont déjà été affichés à gauche ou pas -->
        <xsl:param name="displayRightDots"/><!-- Est-ce que les '...' ont déjà été affichés à droite ou pas -->
     
        <!-- On test si on dois afficher le numéro de la page ou pas -->
        <!-- Et on stock le résultat (true / false) dans notre variable -->
        <xsl:variable name="displayCondition">
            <xsl:value-of select="$pageToShow &lt; $windowSize or $pageToShow &gt; $currentPage - $windowSize and $pageToShow &lt; $currentPage+$windowSize or $pageToShow &gt; $max - ($windowSize - 1)"/>
        </xsl:variable>
     
        <!-- Si on doit afficher le numéro de la page -->
        <xsl:if test="$displayCondition='true'">
            <xsl:choose>
     
                <!-- Si la page à afficher est la page en cours, on peux lui mettre un style different .. -->
                <xsl:when test="$pageToShow = $currentPage">
                    <a href="javascript:void(0)" onclick="moveTo({$pageToShow});return false;" class="selected">
                        <span><xsl:value-of select="$pageToShow"/></span>
                    </a>
                </xsl:when>
     
                <!-- Sinon on l'affiche simplement -->
                <xsl:otherwise>
                    <a href="javascript:void(0)" onclick="moveTo({$pageToShow});return false;">
                        <span><xsl:value-of select="$pageToShow"/></span>
                    </a>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:if>
     
        <!-- On créé une variable qui va nous dire si il faut afficher les points à gauche ou pas -->
        <xsl:variable name="leftDotsOn">
     
            <!-- Si nous n'avons pas affiché le numéro de la page -->
            <xsl:if test="$displayCondition='false'">
     
                <!-- Si la page à afficher est avant la page en cours, alors on dit d'afficher les points à gauche -->
                <xsl:if test="$pageToShow &lt; $currentPage">
                    <xsl:value-of select="not($displayLeftDots='false')"/>
                </xsl:if>
     
                <!-- Si la page à afficher n'est pas avant la page en cours, on dit de ne pas afficher les points à gauche -->
                <xsl:if test="not($pageToShow &lt; $currentPage)">false</xsl:if>
            </xsl:if>
     
            <!-- Si on a affiché le numéro de la page, on n'affiche pas les points à gauche -->
            <xsl:if test="$displayCondition='true'">false</xsl:if>
        </xsl:variable>
     
        <!-- On créé une variable qui va nous dire si il faut afficher les points à droite ou pas -->
        <xsl:variable name="rightDotsOn">
     
            <!-- Si nous n'avons pas affiché le numéro de la page -->
            <xsl:if test="$displayCondition='false'">
     
                <!-- Si la page à afficher est après la page en cours, alors on dit d'afficher les points à droite -->
                <xsl:if test="$pageToShow &gt; $currentPage">
                    <xsl:value-of select="not($displayRightDots='false')"/>
                </xsl:if>
     
                <!-- Si la page à afficher n'est pas après la page en cours, on dit de ne pas afficher les points à droite -->
                <xsl:if test="not($pageToShow &gt; $currentPage)">false</xsl:if>
            </xsl:if>
     
            <!-- Si on a affiché le numéro de la page, on n'affiche pas les points à droite -->
            <xsl:if test="$displayCondition='true'">false</xsl:if>
        </xsl:variable>
     
        <!-- Si on doit afficher les points, à gauche ou à droite -->
        <xsl:if test="$leftDotsOn='true' or $rightDotsOn='true'">
            <a href="javascript:void(0)"><span>...</span></a>
        </xsl:if>
     
        <!-- Si la page à afficher est plus petite que le  nombre total de pages -->
        <xsl:if test="number($pageToShow) &lt; number($max)">
     
            <!-- On appel à nouveau le template, en incrémentant la valeur de $pageToShow -->
            <!-- Pour afficher la page suivante -->
            <xsl:call-template name="boucle">
                <xsl:with-param name="pageToShow" select="$pageToShow + 1"/>
                <xsl:with-param name="max" select="$max"/>
                <xsl:with-param name="currentPage" select="$currentPage"/>
                <xsl:with-param name="windowSize" select="$windowSize"/>
     
                <!-- Cette fois on lui passe en valeur le résultat de $leftDotsOn et $rightDotsOn -->
                <!-- Si ils sont à true, on a déjà affiché les points, et on ne les veux plus -->
                <xsl:with-param name="displayLeftDots" select="$displayLeftDots='true' or $leftDotsOn='true'"/>
                <xsl:with-param name="displayRightDots" select="$displayRightDots='true' or $rightDotsOn='true'"/>
            </xsl:call-template>
        </xsl:if>
     
    </xsl:template>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:call-template name="boucle">
        <xsl:with-param name="pageToShow">1</xsl:with-param>
        <xsl:with-param name="currentPage" select="$pageNum"/>
        <xsl:with-param name="max" select="$pageCount"/>
        <xsl:with-param name="windowSize" select="$windowSize"/>
        <xsl:with-param name="displayLeftDots" select="false"/>
        <xsl:with-param name="displayRightDots" select="false"/>
    </xsl:call-template>

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Pagination veut dire plusieurs pages. Le principe d'une transformation XSLT est de produire exactement une page.

    Comment déciderais-tu :
    - quelle est la page à afficher,
    - comment atteindre les autres pages

    ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut
    merci de ta reponse rapide et d'avoir voulu m'aider ^^
    bon je m'explique :
    mon porjet est un projet web dynamique avec JAVA en utilisant les web services . j'ai une bdd de nom de personnes , et je fais ma recherche depuis le site qui fais appelle au service de la recherche , pour récupéré le resultat il fallais utiliser le xml ,donc le resultat de ce service est un fichier xml qui contien le resultat de la recherche , dans le cas d'une recherche vide il va retourné touts les personnes dans la bdd , (200 personne par exemple ) , puis , à l'aide de quelque api dans une servlet je transforme les resultat du web service (le fichier XML ) vers un fichier html ,(tableau des personne ) . dans le cas de 200 personne le tableau s'affiche grands , donc je veux faire le "suivant et precedent " dans ce fichier . y'a t'il un moyen pour le faire dans mon cas .

  4. #4
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Moi je dirais qu'à partir du moment où tu as ton XML c'est déjà trop tard.

    Le plus simple serait de faire de la pagination avant la requête en base : si la requête retourne trop de résultats (on peut le savoir en faisant une pré-requête avec count et la même clause where), tu ajoutes la pagination à ta requête (et tu fais en sorte que ta page HTML générée prenne en compte la pagination).

    Si tu tiens absolument à faire de la pagination côté client, je ne vois pas d'autre choix que le Javascript. Donc il faut modifier le code HTML généré par le XSL pour créer une page dans laquelle, grâce à un code Javascript, tu pagineras les résultats.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut
    je vous remercie beaucoup de votre réponse c'est une reponse claire qui ma fais donnée beaucoup des idées , j'ai réussie hier a faire une pagination coté client avec javascript sa marche très bien , je vais fouiné sure la première solution (coté serveur ) et je vous tien au courant .
    je pence que le javascript est le mieux adapté a mon cas . vous on dite quoi ?
    merci encore de votre aide

  6. #6
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Citation Envoyé par fouzou11 Voir le message
    je pence que le javascript est le mieux adapté a mon cas . vous on dite quoi ?
    Ca dépend surtout de la taille potentielle des données (et donc de la page HTML générée).
    S'il peut y'avoir beaucoup d'utilisateurs, la page HTML générée sera probablement trop grosse (500ko - 1Mo) ou trop complexe. Elle sera donc longue à télécharger et le navigateur aura peut-être du mal à l'afficher. Dans ce cas, préférer une solution serveur.

    Si le nombre d'utilisateurs est acceptable (ça c'est à toi de le déterminer), il est peut-être préférable de faire une seule requête récupérant tous les utilisateurs en une seule fois plutôt que de faire plusieurs allers-retours avec le serveur, ce qui pourrait surcharger inutilement la connexion et le nombre d'accès à la BDD. Dans ce cas, la solution avec Javascript serait une bonne idée (surtout si tu l'as déjà codé).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pagination XML / XSL / ASP
    Par onlyge dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/02/2009, 23h04
  2. [XSL-FO] pagination dans l'impression pdf
    Par Lolitaaa dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 08/12/2008, 14h03
  3. probléme pagination sous XSL-FO ?
    Par tarekos dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 21/08/2008, 16h46
  4. [XSL~FO] pagination et numerotation
    Par kouadjalain dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 23/01/2007, 15h33
  5. XSL pagination
    Par topolino dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/04/2006, 09h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo