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

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] requête et pagination


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 41
    Par défaut [SimpleXML] requête et pagination
    Bonjour,

    Je voudrais pouvoir faire un système de pagination à partir de la lecture
    du fichier produits.xml, dans mon fichier pr l'exemple,
    j'ai 14 fois lyon (ville de départ)
    donc avec simplexml, je peux afficher:
    en page 1 lyon 14 fois
    ou page 1 lyon 10 fois avec un break

    mais dans ce dernier cas je ne récupère pas les 4 affichages en page 2.

    Pourriez-vous m'éclairer ? merci

    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
     
    $ville_depa="lyon";
     
    define('NB_PAR_PAGE', 10); 
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;   
    $document = simplexml_load_file('produits.xml'); 
    $count = count($document->xpath("//produit[prix/unprix/ville_dep='$ville_depa']")); 
    // NB_PAR_PAGE
     
    $debut_pos = ($page - 1) * NB_PAR_PAGE + 1; 
    $fin_pos = $page * NB_PAR_PAGE + 1;
     
    // $derniere_page = ceil($count / NB_PAR_PAGE);
     
    if ($count > 0) {
    $produits = $document->xpath(utf8_encode("//produit[prix/unprix/ville_dep='$ville_depa'][position()>=$debut_pos and position()<$fin_pos]"));
     
    $compteur=1; //  on compte les articles affichés
    $nb_affichage_page =10; // maxi d'articles par page
     
    	foreach ($produits as $produit) {
     
            echo '<table width="90%" border="0" align="center">
                <tr> 
                    <td width="500" align="left"><div align="justify">'.$debut_pos.' - '.$fin_pos.'</div></td>
                </tr>';
            foreach ($produit->prix->unprix as $unprix) {
     
             if ($unprix->ville_dep == $ville_depa) {
     
                echo '<tr>
                    <td> depart : ' . utf8_decode((string) $unprix->date_dep) . ' à ' . utf8_decode((string) $unprix->ville_dep) . ' - '.$compteur.' </td>
                </tr>';
    // Si le nombre d'articles dépasse 10 on stop l'affichage
    if($compteur++>=$nb_affichage_page)
    break;
     
            }
    	}
            echo '</table>';
        }
     
    // pages numero
     
      $derniere_page = ceil($compteur / NB_PAR_PAGE);
     
        echo '<table align="center">
            <tr>
                <td>';
     
        if ($page > 1) {  
            echo '<a href="' . basename(__FILE__) . '?page=' . ($page - 1) . '" class="bleudetails2"> << pr&eacute;c&eacute;dente </a>'; 
        } 
        for ($i = 1; $i <= $derniere_page; $i++) {  
            if ($i == $page) {
                echo '<a class="bleudetails2" >' . $i . '</a>';
            } else {
                echo '<a href="' . basename(__FILE__) . '?page=' . $i . '" class="bleudetails2"> ' . $i . ' </a>';
            }  
        }
        if ($page < $derniere_page) {
            echo '<a href="' . basename(__FILE__) . '?page=' . ($page + 1) . '" class="bleudetails2">  suivante >> </a>'; 
        }
        echo '</td>
            </tr>
        </table>';
    }
     
    ?>
    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
     
     
    <?xml version="1.0" encoding="utf-8"?>
    <produit>
            <prix>
           <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-11-12</date_dep>
            <prix_produit>3621</prix_produit>
          </unprix>
          <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-10-15</date_dep>
            <prix_produit>3981</prix_produit>
          </unprix>
           <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-11-12</date_dep>
            <prix_produit>3621</prix_produit>
          </unprix>
          <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-10-15</date_dep>
            <prix_produit>3981</prix_produit>
          </unprix>
           <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-11-12</date_dep>
            <prix_produit>3621</prix_produit>
          </unprix>
          <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-10-15</date_dep>
            <prix_produit>3981</prix_produit>
          </unprix>
           <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-11-12</date_dep>
            <prix_produit>3621</prix_produit>
          </unprix>
          <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-10-15</date_dep>
            <prix_produit>3981</prix_produit>
          </unprix>
           <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-11-12</date_dep>
            <prix_produit>3621</prix_produit>
          </unprix>
          <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-10-15</date_dep>
            <prix_produit>3981</prix_produit>
          </unprix>
           <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-11-12</date_dep>
            <prix_produit>3621</prix_produit>
          </unprix>
          <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-10-15</date_dep>
            <prix_produit>3981</prix_produit>
          </unprix>
           <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-11-12</date_dep>
            <prix_produit>3621</prix_produit>
          </unprix>
          <unprix>
            <ville_dep>lyon</ville_dep>
            <date_dep>2007-10-15</date_dep>
            <prix_produit>3981</prix_produit>
          </unprix>
          <unprix>
            <ville_dep>marseille</ville_dep>
            <date_dep>2007-10-01</date_dep>
            <prix_produit>3981</prix_produit>
          </unprix>
          <unprix>
            <ville_dep>paris</ville_dep>
            <date_dep>2007-09-03</date_dep>
            <prix_produit>3521</prix_produit>
          </unprix>
        </prix>
      </produit>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je découvre simpleXML avec ton problème mais ça fonctionne ainsi :
    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
    <?php
    $ville_depa="lyon";
     
    define('NB_PAR_PAGE', 10); 
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;   
    $document = simplexml_load_file('produits.xml'); 
    $count = count($document->xpath("//produit/prix/unprix[ville_dep='$ville_depa']")); 
    // NB_PAR_PAGE
     
    $debut_pos = ($page - 1) * NB_PAR_PAGE + 1; 
    $fin_pos = $page * NB_PAR_PAGE + 1;
     
    $derniere_page = ceil($count / NB_PAR_PAGE);
     
    $produits = $document->xpath(utf8_encode("//produit/prix/unprix[ville_dep='$ville_depa'][position()>=$debut_pos and position()<$fin_pos]"));
    print_r($produits);
    $compteur=1; //  on compte les articles affichés
    $nb_affichage_page =10; // maxi d'articles par page
     
     echo '<table width="90%" border="0" align="center">
                <tr> 
                    <td width="500" align="left"><div align="justify">'.$debut_pos.' - '.$fin_pos.'</div></td>
                </tr>';
     
    	foreach ($produits as $produit) {
            echo '<tr>
                    <td> depart : ' . utf8_decode($produit->date_dep) . ' à ' . utf8_decode($produit->ville_dep) . ' - '.$compteur.' </td>
                </tr>';
    	}
    echo '</table>';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 41
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Je découvre simpleXML avec ton problème mais ça fonctionne ainsi :
    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
    <?php
    $ville_depa="lyon";
     
    define('NB_PAR_PAGE', 10); 
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;   
    $document = simplexml_load_file('produits.xml'); 
    $count = count($document->xpath("//produit/prix/unprix[ville_dep='$ville_depa']")); 
    // NB_PAR_PAGE
     
    $debut_pos = ($page - 1) * NB_PAR_PAGE + 1; 
    $fin_pos = $page * NB_PAR_PAGE + 1;
     
    $derniere_page = ceil($count / NB_PAR_PAGE);
     
    $produits = $document->xpath(utf8_encode("//produit/prix/unprix[ville_dep='$ville_depa'][position()>=$debut_pos and position()<$fin_pos]"));
    print_r($produits);
    $compteur=1; //  on compte les articles affichés
    $nb_affichage_page =10; // maxi d'articles par page
     
     echo '<table width="90%" border="0" align="center">
                <tr> 
                    <td width="500" align="left"><div align="justify">'.$debut_pos.' - '.$fin_pos.'</div></td>
                </tr>';
     
    	foreach ($produits as $produit) {
            echo '<tr>
                    <td> depart : ' . utf8_decode($produit->date_dep) . ' à ' . utf8_decode($produit->ville_dep) . ' - '.$compteur.' </td>
                </tr>';
    	}
    echo '</table>';

    Oups !! effectivement

    Merci beaucoup d'avoir pris le temps de me répondre
    je ne comprenais plus rien

    manu

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

Discussions similaires

  1. [SimpleXML] requête xpath avec not start-width et contains
    Par gazelle dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 15/05/2012, 16h45
  2. [MySQL] Requête de pagination
    Par ghostwinged dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/01/2008, 19h24
  3. [MySQL] Affichage requête aléatoire paginé
    Par bodysplash007 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 22/05/2007, 11h52
  4. [SimpleXML] requête sur un fichier xml
    Par ANISSS dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 03/05/2007, 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