SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano

278 Plugins, 195 contribs sur SPIP-Zone, 158 visiteurs en ce moment

Accueil > Outils pour plugins > Itérateurs > Itérateurs pour SPIP 2.1 > Les Itérateurs pour SPIP 2.1

Les Itérateurs pour SPIP 2.1

29 décembre 2010 – par Fil, Matthieu Marcillaud – 81 commentaires

58 votes

Les itérateurs sont une fonctionnalité de la branche dev de SPIP. Ils permettent de faire des boucles non plus seulement sur des articles et autres objets de la base de données SQL de SPIP, mais sur n’importe quoi : fichiers, tableaux de données, webservices, etc.

Ce plugin met cette fonctionnalité à disposition dans SPIP 2.1. Prenez le temps de lire la documentation et de regarder les nombreuses démos disponibles dans le plugin « Démos des itérateurs ».

Voici quelques exemples des boucles que permettent les itérateurs de SPIP :

— lire un tableau de données produit par une fonction quelconque
— afficher le contenu d’un fichier local au format XML, CSV, JSON, YAML, iCalendar, etc.
— boucler sur la liste des fichiers présents dans un répertoire du serveur
— faire une requête sur un webservice et afficher les résultats.

Concrètement, on peut sans grand effort faire des boucles « Web 1.0 » sur toutes sortes de fichiers déposés sur le serveur. On peut aussi boucler en « Web 2.0 » sur des vidéos YouTube, sur des photos Flickr, des livres (par titre ou par numéro ISBN), sur des requêtes de traduction sur google.translate, sur un tableur édité sur Google Documents, etc.

Pour ne prendre qu’un seul exemple, voici une boucle qui permet d’afficher le contenu d’un tableur Google Documents :

Boucle :

[(#REM) Identifiant de notre tableur]
#SET{key,0AolUP3c6K9JodGwxRjJzb2hyTGZLU29qRVItRXk1VXc}
<B_csv>
<table>
<BOUCLE_csv(DATA)
{source csv, https://spreadsheets.google.com/pub?key=#GET{key}&hl=en&output=csv}>
<tr>
<td>#VALEUR{0}</td>
<td>#VALEUR{1}</td>
<td>#VALEUR{2}</td>
</tr>
</BOUCLE_csv>
</table>
</B_csv>

Résultat :

Pays PIB Population
Rémitanie 12 1
Baldoghistan 23 2
Républiques Unies 43 3
Diloduristan 12 4
Zarlatie 9 5

Ce plugin a été intégré dans SPIP 3 : http://www.spip.net/fr_article5444.html

Les liens de la documentation originale/officieuse (et en version bêta) :
— Les itérateurs de SPIP
— Exemples de BOUCLE(DATA)
— Exemples de boucles YQL
— Le plugin iCalendar
— Plugin Booksearch

 

Si vous utilisez ce plugin, n’hésitez pas à partager dans le forum ci-dessous vos formats, et toutes vos astuces pour boucler sur différents services et fichiers.

Voir en ligne : http://plugins.spip.net/iterateurs

Retour en haut de la page

Vos commentaires

  • Le 13 juin à 18:56, par BoOz En réponse à : Les Itérateurs pour SPIP 2.1

    Hello,

    Voici une technique pour lister un répertoire en triant les fichiers par date. J’ignore s’il y a plus simple, mais j’ai du recourir à deux boucles.

    #SET{table,#ARRAY}
    <BOUCLE_ls(DATA){source glob, #CHEMIN{lol/*.html}>[(#SET{table,#GET{table}|array_merge{#ARRAY{#VALEUR,#VALEUR|filemtime}}})]</BOUCLE_ls>
    <BOUCLE_ls2(DATA){source table, #GET{table}}{!par valeur}>#CLE : [(#VAL{Y-m-d H:i:s}|date{#VALEUR})]</BOUCLE_ls2>
    • Le 14 juin à 07:44, par denisb En réponse à : Les Itérateurs pour SPIP 2.1

      il existe la méthode ’ls’ fournie avec iterateurs (Version : 1.0.0 [72598]) pour spip 2 et qui permet de faire :

      <BOUCLE_mon_ls(DATA) {source ls, squelettes-dist/*.html} {"<br >"} {!par mtime}>
         [(#VALEUR{file})] : [(#VALEUR{mtime})]
      </BOUCLE_mon_ls>
       

      et on peut utiliser [(#VALEUR|foreach)] dans la boucle pour afficher toutes les clefs utilisables :

      - dirname => squelettes-dist
      - basename => test_boucle.html
      - extension => html
      - filename => test_boucle
      - dev => 234881026
      - ino => 8235281
      - mode => 33188
      - nlink => 1
      - uid => 501
      - gid => 501
      - rdev => 0
      - size => 607
      - atime => 1371188432
      - mtime => 1371188431
      - ctime => 1371188431
      - blksize => 4096
      - blocks => 16
      - file => test_boucle.html

    Répondre à ce message

  • Le 12 juin à 23:55, par Kyomii En réponse à : Les Itérateurs pour SPIP 2.1

    Bonjour,

    je souhaiterai savoir si on peut faire une boucle DATA sur un lecteur réseau, je souhaite parcourir certains dossiers du lecteur et en afficher les fichiers.
    J’ai fait quelques tests avec glob sans résultat, je n’ai pas d’erreurs mais aucun resuĺtats.
    Je me suis basé sur ce code ci dessous en remplaçant IMG/jpg/*.jpg par le chemin de mon lecteur réseau, mais ça ne fonctionne pas.

    <BOUCLE_ls2(DATA){source glob, IMG/jpg/*.jpg}>
    [(#VAL{Y-m-d H:i:s}|date{#VALEUR|filemtime})] / #VALEUR
    </BOUCLE_ls2>

    Merci de votre aide !

    • Le 13 juin à 07:21, par Pierre KUHN En réponse à : Les Itérateurs pour SPIP 2.1

      Bonjour

      On peut avoir le code que tu as fait ?
      Avec le code IMG/ ça fonctionne ?

    • Le 13 juin à 11:16, par kyomii En réponse à : Les Itérateurs pour SPIP 2.1

      Bonjour,

      Avec IMG/ oui ça fonctionne, voici le code que j’ai utilisé :

       <BOUCLE_ls2(DATA){source glob, IMG/doc/*.doc}>
           [(#VAL{Y-m-d H:i:s}|date{#VALEUR|filemtime})] / #VALEUR
           </BOUCLE_ls2>

      Et voici le code utilisé pour accéder au lecteur réseau

       <BOUCLE_ls2(DATA){source glob, D:\\DF\\DSE\\PS\\Procedures\\Appli\\*.doc}>
           [(#VAL{Y-m-d H:i:s}|date{#VALEUR|filemtime})] / #VALEUR
           </BOUCLE_ls2>

      merci par avance !

    Répondre à ce message

  • Le 6 mars à 23:23, par Suske En réponse à : Les Itérateurs pour SPIP 2.1

    J’ai bien cherché partout sur le forum et je n’ai pas vu un endroit où ce point aurait été abordé, alors voilà, je voulais signaler un point important à mes yeux :

    Les itérateurs c bôôôô

    -  même le mercredi soir à 23h23
    -  même dans le core

    Si, merci.

    Répondre à ce message

  • Le 31 mai 2012 à 12:32, par AlainF En réponse à : Les Itérateurs pour SPIP 2.1

    Bonjour,
    Merci pour votre travail qui m’intérresse particulièrement.
    Avec comme configuration Spip 2.1.14 et le plugin Itérateurs pour Spip 2.1, je souhaite récupérer les éléments d’un fichier xml : soit le prix (pppp) d’un système de réservation.

    Fichier XML :

    <?xml version="1.0" encoding="utf-8"?>
    <message>
     <success />
     <pricingRangeResponse groupId="xxxx" beginDate="2012-06-01" endDate="2012-06-01" defaultCurrency="EUR">
       <hotel id="yyyy">
         <rate id="zzzzz" type="LowestMinimumPrice">
           <room id="rrrrr" price="pppp" />
         </rate>
       </hotel>
     </pricingRangeResponse>
    </message>

    En utilisant la boucle issue du plugin Itérateurs :

    <BOUCLE_r8(DATA){source xml, http://adresse.dufichier.xml}{datapath }>
    "#CLE":
    <B_f>
    <ul>
    <BOUCLE_f(DATA){source table, #VALEUR**}>
    <B_g>
    <li>"#CLE":
            <BOUCLE_g(BOUCLE_f)/>
    </B_g><li>#VALEUR</li><//B_g></BOUCLE_f>
    </ul>
    </B_f>
    </BOUCLE_r8>

    je récupère tous les éléments :
    -  « success »
    -  « pricingRangeResponse »
    -  « xxxx »
    -  etc.
    dont « pppp » alors que je ne souhaite que la valeur « pppp » de « price= » :

    Je n’arrive pas à indiquer le(s) critère(s) nécessaire dans la boucle, si vous avez une idée, je suis preneur.

    Merci par avance.

    • Le 31 mai 2012 à 14:21, par Matthieu Marcillaud En réponse à : Les Itérateurs pour SPIP 2.1

      En attendant une intégration un jour (c’est un peu tout neuf et en test), je vous propose de créer un fichier mes_fonctions.php dans votre squelettes contenant cette fonction :

      1. <?php
      2.  
      3. /**
      4.  * xml -> tableau
      5.  * @param  string $u
      6.  * @return array
      7.  */
      8. function inc_simplexml_to_array_dist($u) {
      9.         return @xmlObjToArr(simplexml_load_string($u));
      10. }
      11.  
      12. // http://www.php.net/manual/pt_BR/book.simplexml.php#108688 (17 mai 2012)
      13. function xmlObjToArr($obj) {
      14. # Cette fonction getDocNamespaces est tres gourmande sur de gros fichiers
      15. # $namespace = $obj->getDocNamespaces(true);
      16.  
      17.         $namespace[NULL] = NULL;
      18.  
      19.         $children = array();
      20.         $attributes = array();
      21.         $name = strtolower((string)$obj->getName());
      22.  
      23.         $text = trim((string)$obj);
      24.         if( strlen($text) <= 0 ) {
      25.             $text = NULL;
      26.         }
      27.  
      28.         // get info for all namespaces
      29.         if(is_object($obj)) {
      30.             foreach( $namespace as $ns=>$nsUrl ) {
      31.                 // atributes
      32.                 $objAttributes = $obj->attributes($ns, true);
      33.                 foreach( $objAttributes as $attributeName => $attributeValue ) {
      34.                     $attribName = strtolower(trim((string)$attributeName));
      35.                     $attribVal = trim((string)$attributeValue);
      36.                     if (!empty($ns)) {
      37.                         $attribName = $ns . ':' . $attribName;
      38.                     }
      39.                     $attributes[$attribName] = $attribVal;
      40.                 }
      41.  
      42.                 // children
      43.                 $objChildren = $obj->children($ns, true);
      44.                 foreach( $objChildren as $childName=>$child ) {
      45.                     $childName = strtolower((string)$childName);
      46.                     if( !empty($ns) ) {
      47.                         $childName = $ns.':'.$childName;
      48.                     }
      49.                     $children[$childName][] = xmlObjToArr($child);
      50.                 }
      51.             }
      52.         }
      53.  
      54.         return array(
      55.             'name'=>$name,
      56.             'text'=>$text,
      57.             'attributes'=>$attributes,
      58.             'children'=>$children
      59.         );
      60.     }
      61.  
      62. ?>

      De la sorte vous pourrez utiliser

      1. <BOUCLE_r8(DATA){source simplexml, http://adresse.dufichier.xml}>

      Avec beaucoup plus d’information présentes. Utilisez [<pre>(#VALEUR|print_r{1})</pre>] pour les afficher et étudier comment récupérer votre info.

      1. #VALEUR{children}
      2. #VALEUR{attributes}
      3. Peut être :
      4. #VALEUR{children/pricingRangeResponse/0/children/hotel/0/children/rate/0/children/room/0/attributes/price}
    • Le 11 février à 12:53, par Cedric Morin En réponse à : Les Itérateurs pour SPIP 2.1

      Pour http://spip3.quejai.me/xml-afficher-le-cours-du-dollar-des-30-derniers-jours j’ai corrigé la fonction inc_simplexml_to_array_dist ci-dessus pour en faciliter la lecture par la boucle DATA :

      1. /**
      2.  * xml -> tableau
      3.  * @param  string $u
      4.  * @return array
      5.  */
      6. function inc_simplexml_to_array_dist($u){
      7.         return array('root'=>@xmlObjToArr(simplexml_load_string($u)));
      8. }
    • Le 27 février à 16:49, par Suske En réponse à : Les Itérateurs pour SPIP 2.1

      Hello,

      Cette fonction ça rend le xml utilisable dans SPIP ;-). Du coup, je l’ai :
      -  intégrée dans ce plugin (DATA, simplexml)
      -  mise dans un plug SPIP3 en attendant l’intégration au core http://files.spip.org/spip-zone/ite...
      -  accessoirement, dans la foulée, les démos ont été sorties dans un plugin séparé...

      Le tout dans le cadre du grand complot ircien.

    Répondre à ce message

  • Le 5 septembre 2012 à 17:26, par Pierrot En réponse à : Les Itérateurs pour SPIP 2.1

    Bonjour,

    j’ai une question préalable stupide mais qui vient de me faire tourner en rond pendant une heure : comment fait-on pour afficher du code ici sans qu’il soit transformé (comme le font certains plus haut) ?
    J’avais un beau message de 50 lignes que j’ai finalement abandonné car mes boucles étaient explosées ... j’ai tenté tout ce que je connais, ma barre d’outil ne comporte pas les habituels boutons pour ça, aucun html n’est accepté, je ne peux pas mettre la balise code ... google n’est pas mon ami sur ce coup là ... bref j’ai fini par poster sur le forum ou tout ça marche nickel, mais je pense toujours que ma question serait mieux ici donc j’espère qu’une bonne âme me donnera le truc ... (d’ailleurs il me semble avoir déjà utilisé ça avant ...).

    Merci. Pierre.

    Répondre à ce message

  • Le 30 décembre 2010 à 11:35, par Corrobori En réponse à : Les Itérateurs pour SPIP 2.1

    Humm
    sur un spip tout neuf avec les plugins agenda , bonux ,cfg et crayons j’ai

    Parse error : syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ’}’ in /home/www/monsite/www/agenda/plugins/auto/iterateurs/public/iterateur.php on line 23.

    Les modifications du 30/12 réparent ça où c’est autre chose.

    En tout cas cette série de plugins à l’air très prometteuse .

    • Le 30 décembre 2010 à 11:50, par Matthieu Marcillaud En réponse à : Les Itérateurs pour SPIP 2.1

      N’oublions pas de dire qu’il faut PHP 5.1 minimum :) ... Et 5.3 pour utiliser glob() il me semble.

    • Le 30 décembre 2010 à 11:53, par Fil En réponse à : Les Itérateurs pour SPIP 2.1

      Non, pas glob ! glob fonctionne à partir de (PHP 4 >= 4.3.0, PHP 5)

    • Le 30 décembre 2010 à 11:54, par Matthieu Marcillaud En réponse à : Les Itérateurs pour SPIP 2.1

      Rectification... glob() c’est 4.3 pas 5.3... reste que les itérateurs, c’est PHP 5 qu’il faut. Nous allons le mentionner.

    • Le 7 octobre 2011 à 17:38, par reda aourag En réponse à : Les Itérateurs pour SPIP 2.1

      bonjour

      si dans une requête sql avec itérateur je veux interroger une seconde base déclarer dans spip, pouvez vous me donner la syntaxe ?

      ex :

      #SETreq,« select libelle_commune, id_entree from spip_commune »

      • #LIBELLE_COMMUNE" - #ID_ENTREE

      merci par avance pour votre reponse

    Répondre à ce message

  • Le 24 août 2011 à 21:23, par Yffic En réponse à : Les Itérateurs pour SPIP 2.1

    Hello

    Serait-il envisageable de pouvoir « paramétrer » la boucle ENUM afin de la faire tourner à l’envers ? (ça évite de faire un calcul ensuite)... Et p’têt même aussi que ça servirait si on pouvait faire varier le pas ?

    Répondre à ce message

  • Le 15 avril 2011 à 16:39, par mirobolus En réponse à : Les Itérateurs pour SPIP 2.1

    Je viens de le faire, j’ai tout rechargé sur le serveur, et mon menu déroulant par famille de produits est toujours vide. Je ne comprends pas. Y a-til un cache au niveau du plugin ? Ou des fichiers qui se crèent ailleurs ? La page est ici

    • Le 15 avril 2011 à 17:02, par Fil En réponse à : Les Itérateurs pour SPIP 2.1

      Vérifie bien ton squelette, car si le deuxième menu est vide, le premier est lui bien rempli

    • Le 15 avril 2011 à 17:12, par mirobolus En réponse à : Les Itérateurs pour SPIP 2.1

      Merci pour ton aide.
      Pour le squelette, c’est justement le 2e formulaire que j’ai touché aujourd’hui en tentant d’inclure dans la boucle {cle>0}. Ensuite, j’ai enlevé cette chaîne de caractères et rebalancé sur le serveur. Et depuis, çà ne veut plus revenir comme avant.
      Précision : chaque formulaire de recherche est indépendant dans un fichier, dans le dossier formulaires.
      Je ne vois pas... Cà semble venir de la mémoire quelque part.

    • Le 15 avril 2011 à 17:25, par mirobolus En réponse à : Les Itérateurs pour SPIP 2.1

      Çà remarche : j’ai vidé tout le contenu de mon dossier cache et renvoyé le fichier du formulaire famille.
      En tout cas, merci pour ta dispo. Maintenant, cette histoire de tri dans le contenu du menu déroulant reste à régler (comme tu le vois, il y a une cellule vide et l’item famille qui est la clé de ma colonne)..

    Répondre à ce message

  • Le 15 avril 2011 à 16:00, par mirobolus En réponse à : Les Itérateurs pour SPIP 2.1

    {cle>0} ne fonctionne pas (mon menu disparaît de l’écran).
    {cle=0} m’affiche le menu avec une seule cellule vide.

    Depuis cet essai, impossible de faire refonctionner le bastringue : Rechargement dans l’espace privé + cache navigateur vidé + renvoi sur le serveur du fichier csv (et même déplacement) + réinstall du plugin : le menu déroulant reste à son dernier état (1 cellule vide) et la page de résultat de ma recherche ne m’affiche plus rien.

    Ce qui est étrange, c’est que ce n’est pas la 1re fois que çà m’arrive : ce matin, la recherche ne fonctionnait pas du tout alors que je n’avais rien touché depuis des jours.. Et çà se remet à fonctionner sans que je comprenne vraiment pourquoi. Avez-vous des soucis de ce genre ?
    Tiens, d’ailleurs, là, la page de résultat remarche, mais le menu déroulant reste vide.

    Répondre à ce message

  • Le 31 mars 2011 à 15:04, par nino En réponse à : Les Itérateurs pour SPIP 2.1

    Bonjour,
    Je suis intéressé par les boucles des itérateurs pour faire une recherche dans un fichier csv (répertoire d’adresses). Que se passe-til si mon tableau comporte des cellules vides ? Comment les exclure de la liste récupérée ? j’ai essayé de créer une liste déroulante qui récupère les noms de mes contacts, mais si une case est vide, le 1er élément de ma liste est une zone vide.
    Merci.

    • Le 15 avril 2011 à 12:38, par mirobolus En réponse à : Les Itérateurs pour SPIP 2.1

      Je rejoins cette question avec une nuance dans la demande : dans la boucle DATA, comment peut-on faire pour exclure la 1re ligne de mon fichier, celle qui contient le nom de mes colonnes ? J’ai besoin de ces éléments pour faire ma recherche, mais pas pour construire le menu déroulant de mon formulaire de recherche.
      Et effectivement, si mon csv contient une cellule vide, elle va apparaître dans mon menu déroulant. Le critère fusion me permet de ne pas avoir x cellules vides dans le menu, mais je ne sais pas comment les ignorer carrément.
      Merci !!

    • Le 15 avril 2011 à 14:42, par Fil En réponse à : Les Itérateurs pour SPIP 2.1

      peut-être avec le critère {cle>0}

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d'abord sur gravatar.com (gratuit et indolore) et n'oubliez pas d'indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • ScolaSPIP pour SPIP3

    21 mai 2012 – 225 commentaires

    Un plugin-squelette personnalisable pour sites Web d’établissements scolaires

  • Saisies

    27 mars 2010 – 311 commentaires

    Introduction Créer un formulaire est une tâche toujours un peu répétitive : les champs ont souvent les mêmes propriétés, le même accompagnement (message d’erreur, explication, ...) et la même structure HTML. Ce plugin est un outil pour les développeurs (...)

  • Agenda 2.0

    3 novembre 2008 – 864 commentaires

    Voici la version pour SPIP 2.0 du Plugin Agenda pour SPIP 1.9.2, avec une interface remaniée pour encore plus de plaisir. Pour une documentation concernant l’utilisation d’Agenda 3 pour SPIP 3, veuillez pour l’instant vous référer à SPIP 3, Agenda (...)

  • doc2img

    14 octobre 2007 – 21 commentaires

    Ou comment convertir des documents multipages (pdf, tiff, etc.) en une succession d’images.

  • Einsteiniumist (Squelette)

    23 avril – 29 commentaires

    Un squelette principalement conçu pour les sites de type blog et portfolio. Présentation : Adaptation pour Zpip du thème Wordpress Einsteiniumist conçu par Padd Solutions. Voir une démo du thème et du squelette Einsteiniumist. Ce squelette a été (...)