Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/05/2011, 19h35   #1
Invité de passage
 
pat ludo
Inscription : novembre 2009
Messages : 29
Détails du profil
Informations personnelles :
Nom : pat ludo

Informations forums :
Inscription : novembre 2009
Messages : 29
Points : 0
Points : 0
Par défaut 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 :
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 :
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>
manuso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 20h18   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Je découvre simpleXML avec ton problème mais ça fonctionne ainsi :
Code :
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>';
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 23h05   #3
Invité de passage
 
pat ludo
Inscription : novembre 2009
Messages : 29
Détails du profil
Informations personnelles :
Nom : pat ludo

Informations forums :
Inscription : novembre 2009
Messages : 29
Points : 0
Points : 0
Citation:
Envoyé par sabotage Voir le message
Je découvre simpleXML avec ton problème mais ça fonctionne ainsi :
Code :
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
manuso est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h44.


 
 
 
 
Partenaires

Hébergement Web