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 :

[DOM] Trie, limiter nombre affichage.


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Par défaut [DOM] Trie, limiter nombre affichage.
    bonjour,
    Je test actuellement simplexml mais d’après se que je vois on est assez limiter alors je passe sur dom pour pouvoir avoir plus de possibilité.

    actuellement j'ai un fichier xml dont je fais simplement afficher les données dans un page php (comme avec simplexml).

    maintenant je souhaiterai pouvoir organiser mes données comme par exemple trier par date, limiter le nombre d'affichages a 10 (ou plus ou moins) et c'est là, étant débutant dans se type de programmation que j'ai besoin de votre aide.

    je voudrai avoir un affichage trié par date (il y a bien un champ date dans le xml (date_debut et aussi un date_fin).

    Voici mon code actuel que je voudrai adapté pour avoir le trie croissant par date_debut. (avec sql pas de soucis mais avec xml je sais pas)

    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
     
    $fichier = 'monfichier.xml';
    $dom = new DOMDocument();
    if (!$dom->load($fichier)) {
        die('Impossible de charger le fichier XML');
    }
     
    $itemList = $dom->getElementsByTagName('sit_liste');
    foreach ($itemList as $item) 
    {
        $titre = $item->getElementsByTagName('NOM');
    	if ($titre->length > 0) 
    	{
            echo $titre->item(0)->nodeValue;
        } 
     
    	else 
    	{
            echo '(Sans Nom)';
        }
     
        echo '<br />'."\n";
     
        $commune = $item->getElementsByTagName('ADRPROD_LIBELLE_COMMUNE');
        if ($desc->length > 0) 
    	{
            echo ' Commune : '.$commune->item(0)->nodeValue.'<br/>'."\n";
        }
     
        $debut = $item->getElementsByTagName('DATE_DEBUT');
        if ($desc->length > 0) 
    	{
            echo ' DATE_DEBUT : '.$debut->item(0)->nodeValue.'<br/>'."\n";
        }
     
        $desc = $item->getElementsByTagName('COMMENTAIRE');
        if ($desc->length > 0) 
    	{
            echo ' '.$desc->item(0)->nodeValue.'<br/>'."\n";
        }
     
        echo '<br/>'."\n";
    }

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 373
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 373
    Billets dans le blog
    17
    Par défaut
    Je test actuellement simplexml mais d’après se que je vois on est assez limiter alors je passe sur dom pour pouvoir avoir plus de possibilité.
    A ma connaissance il n'y a pas grand chose que DOM puisse faire et pas SimpleXML.

    maintenant je souhaiterai pouvoir organiser mes données comme par exemple trier par date
    Traitement à faire avec PHP. Possible avec XSLT, mais bof.

    limiter le nombre d'affichages a 10 (ou plus ou moins)
    Traitement à faire avec PHP ou une requête XPath (qui est aussi dispo sous SimpleXML) type //target[position( ) = 1 and position( ) <= 10]

  3. #3
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Citation Envoyé par Séb. Voir le message
    A ma connaissance il n'y a pas grand chose que DOM puisse faire et pas SimpleXML.


    Traitement à faire avec PHP. Possible avec XSLT, mais bof.


    Traitement à faire avec PHP ou une requête XPath (qui est aussi dispo sous SimpleXML) type //target[position( ) = 1 and position( ) <= 10]
    Juste pour info, position() renvoie la position dans le jeu de résultats. Si un tri est appliqué au jeu de résultat cela se fait à postériori du selecteur, la limitation ne peut donc se faire que dans la boucle elle-même :

    Fonctionnera pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:for-each select="//target[position( ) &lt;= 10]">
        <xsl:sort order="descending" select="sort_key" />
        <!-- ne va trier que les noeuds entre 1 et 10 -->
    </xsl:for-each>
    Fonctionnera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:for-each select="//target">
        <xsl:sort order="descending" select="sort_key" />
        <xsl:if test="position() &lt;= 10">
            <!-- va trier tous les noeuds puis n'afficher que les dix premiers  -->
        </xsl:if>
    </xsl:for-each>

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Par défaut
    Merci pour vos réponses.
    Pour le nombre d'affichage j'ai opté pour php.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $i=0; 
    $maxactu = 10; //nombre max actu à afficher
     
    //Affichage des données du fichier XML 
    foreach ($itemList as $item) 
    {
     
    $i++;
    echo 'i = '.$i;
    if ($i <= $maxactu ) {
    .......
    Par contre pour faire le trie en fonction des dates qui sont de le xml je bloc. j'ai essayé la fonction sort() mais je n'arrive pas a trier.

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 373
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 373
    Billets dans le blog
    17
    Par défaut
    Donne-nous des extraits significatifs et fonctionnels de ton XML et de ton PHP afin qu'on puisse voir ce qui bloque et t'aider.

Discussions similaires

  1. [WD11] Limiter l'affichage du nombre de ligne d'une table par page
    Par labifle dans le forum WinDev
    Réponses: 20
    Dernier message: 19/04/2010, 09h54
  2. Limiter nombre d'enregistrement d'un sous-formulaire
    Par snoopy69 dans le forum Access
    Réponses: 12
    Dernier message: 26/10/2005, 17h03
  3. Limiter nombre de chiffre apres la virgule
    Par MaxiMax dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/08/2005, 12h02
  4. limitation nombre de fichiers
    Par bozo dans le forum MFC
    Réponses: 6
    Dernier message: 02/07/2003, 13h44
  5. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 21h31

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