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 : https://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
- Quelques plugins exploitant les itérateurs
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.
Discussions par date d’activité
24 discussions
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.
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 !!
peut-être avec le critère
{cle>0}
Répondre à ce message
Ce projet est absolument énorme ! Et il ouvre des perspectives hallucinantes.
Je m’intéresse aux itérateurs (et je n’ai même pas peur, malgré mes très faibles connaissances en programmation !!) et j’ai un pb à vous soumettre.
Je dispose d’un fichier de stock de pièces (12000 lignes environ) que mon client souhaite mettre en ligne sur son site. Après avoir écumé les solutions de Catalogue (pas adapté car mon client doit mettre à jour son stock quotidiennement et souhaite limiter au max ses interventions) et Fulltext (qui ne fonctionne que sur PDF et ne permet pas de sortir les infos du document pour les afficher) je soupçonne les itérateurs d’être LA solution.
Je souhaite proposer un module de recherche sur ce fichier (voui voui). J’ai déjà réussi à extraire du stock.csv les données par Fabricant et par Référence, à mettre tout çà dans un joli tableau et géré la pagination. C’est déjà exceptionnel.
Maintenant, je me dis que ce serait super si je pouvais mettre en place un menu déroulant qui récupèrerait la liste des fabricants présents dans mon fichier (mais un même fabricant peut apparaître jusqu’à 1000 fois, donc il faut certainement exclure les doublons) et un champ input dans lequel on saisirait directement la réf cherchée. Mon résultat serait alors affiché avec ma fameuse boucle !
Seulement là, je coince très sérieusement... Est-ce que quelqu’un pourrait m’aider ? Parce qu’il faudrait passer le contenu du champ de recherche dans une moulinette que je suis incapable d’écrire...
Voici donc ma boucle qui va bien :
Et une idée du tableau
Donc, pour me résumer :
1. comment éviter les doublons dans la liste de fabricants qui sera présente dans mon menu déroulant ?
2. euh... comment écrire ce qui doit se passer entre le submit et la page de résultats ?...
... :-)
Désolée d’avoir posté un message si long...
J’ai résolu mon histoire de doublons avec le critère fusion ainsi :
Reste que je ne sais pas comment pourrait se coder la suite.
J’avance !
Voici le formulaire qui liste mes fabricants :
Du coup, l’item sélectionné est bien passé dans l’url (/spip.php ?page=recherche&fabricant=ASTEC). Maintenant, je dois afficher le résultat dans la page recherche et ma boucle ne fonctionne pas : la réponse est toujours « Recherche infructueuse » :
Comment relier la valeur transmise dans l’url dans cette boucle d’affichage ? Merci d’avance !
Et puis, j’ai un autre soucis, de taille celui-là : un csv de 12000 lignes, c’est lourd ! et j’ai des « Fatal error : Maximum execution time of 30 seconds exceeded in /var/www/n/na/nat/nathalie.brunelli.perso.sfr.fr/public_html/plugins/auto/iterateurs/inc/csv.php on line 37 » !
Bon allez, je vous laisse la main pour la réponse, maintenant !!
bien donc… pour le timeout… si tu veux un truc super qui fasse tout sur un hébergement gratuit et en moins de 30 secondes, ça risque d’être coton :-)
Pour la recherche par fabricant, essaie d’ajouter dans la définition de ta boucle le critère optionnel
{fabricant?}
; il se pourrait que ça fonctionne.Bonjour Fil et merci pour ton aide.
Pour ce qui est du serveur actuel, c’est un hébergement de tests. Au final, mon site sera sur un hébergement pro.
J’ai donc réduit la taille du csv pour mes tests et je n’ai plus de pb.
Pour l’essai avec
{fabricant?}
, çà ne fonctionne pas. Mais je peux récupérer la variable de l’url pour l’affichage du titre de ma page ainsi :Est-ce que cette variable pourrait être utilisée dans ma boucle ? Comment l’écrire dans ce cas ?
Merci à toi.
Oui dans ce cas tu peux tenter
{fabricant=#ENV{fabricant}}
.çà ne marche pas avec
<BOUCLE_csvref(DATA){source csv, #CHEMIN{IMG/csv/stock.csv}} {fabricant=#ENV{fabricant}} {par /0} {pagination 50}>
ou<BOUCLE_csvref(DATA){source csv, #CHEMIN{IMG/csv/stock.csv}} {fabricant=#GET{fabricant}} {par /0}{pagination 50}>
(-> recherche infructueuse) mais par contre, le tableau apparait quand je mets ceci :Mais le contenu du tableau est vide. On avance, non ?
Je suis désolée de vous embêter avec mon pb, mais je ne trouve pas comment afficher mon tableau de résultat de recherche. Pour résumer, j’ai bien le nom de mon fabricant dans l’URL, que je stocke dans une variable. Mais je n’arrive pas à afficher un tableau qui ne récupèrerait que les valeurs associées au nom de mon fabricant récupéré.
La boucle ci-dessus est la dernière étape atteinte.
J’ai vu qu’il existe des éléments d’appel (datapath ou cle). Est-ce que la même chose existe pour un fichier csv ? ou dois-je convertir mon stock Excel dans un autre format ?
Mille mercis pour votre aide.
Problème résolu gràce à la disponibilité de Fil. Merci encore à lui. Voici la boucle qui permet d’afficher les résultats d’une recherche dans un fichier CSV :
On récupère ci-dessous la valeur transmise dans l’URL :
#SET{fabricant,#ENV{fabricant}}
puis :
<BOUCLE_csvref(DATA){source csv, #CHEMIN{stock/nomfichier.csv}} {fabricant=#GET{fabricant}} {par /0}{pagination 50}>
Elle permet de chercher dans
?page=recherche&fabricant=nomfabricant
D’après les précieux conseils de Fil, en utilisant == plutôt que = , au lieu de chercher
un fabricant par son nom précis, on recherche par une sous-partie du nom (exemple pour le fabricant 3COM , &fabricant=3C donnera 3COM).
<BOUCLE_csvref(DATA){source csv, #CHEMIN{stock/nomfichier.csv}} {fabricant==#GET{fabricant}} {par /0}{pagination 50}>
Question résolue !
Répondre à ce message
Bonjour à tous
je bute sur un problème :
Quid du critere IN avec la boucle (DATA) concernant un scv ?
En effet, val IN #ENVval ne fonctionne pas (#ENVval est un tableau
Par contre bien sur val =#ENVval fonctionne tant que #ENVval ne contient qu’une valeur.
Pour être plus précis, avec le critère IN, la boucle retour tous les résultats.
Avez-vous une idée du problème ?
Merci
samsam
Répondre à ce message
Salut !
J’ai quelques difficultés à utiliser ce plugin sur des tableaux. Par exemple, le code ci-dessous ne donne aucun résultat de boucle :
Faut-il impérativement déclarer un tableau php global ?
Pas de problème ici... (il manque un } fermant...)
Seigneur, quelle honte ^^"
Comme quoi parfois il faut décrocher deux minutes et sortir le nez de son code sinon on ne voit rien...
En tout cas, voilà un super plugin qui nous rapproche un peu plus d’une syntaxe full SPIP.
C’est du beau travail !
Répondre à ce message
Bonjour,
Je souhaite installer la dernière version de ckeditor sur mes sites spip hébergés chez Free. J’ai bien noté qu’Itérateurs demandait la version 5.1 de PHP. Or le phpinfo de Free indique la version 4.4.3-dev. J’obtiens donc la même erreur que beaucoup « à la ligne 32 ».
Que faire d’après vous ?
Merci par avance !!!
Michel
Au hasard, chercher « php5 free.fr » sur un moteur de recherche... Tout est expliqué...
Merci beaucoup, ça fonctionne !
Répondre à ce message
Bonjour à tous,
Je voulais installer dans mon spip 2.1.8 le plugin ckeditor dans ca version 3.4.2 mais il me demande l’installation du plugin ITERATEURS version 0.2.4 mini.
J’ai donc installé ce plugin dans sa version 0.2.5. Mais dès que je l’active je perd la mise en plage et en bas de page j’ai le message d’erreur suivant :
J’ai modifier une partie du chemin par des XXX pour plus de confidentialité.
Avez vous une idée pour résoudre ce problème ?
Merci d’avance ci vous avez une idée, car les fonctionnalités permise par ce plugin me semble pouvoir faire passer une grande étape à spip dans son développement.
A+
Tiens... déjà des plugins qui demandent les itérateurs ? sympa.
Sinon, ton erreur, c’est que Itérateurs nécessite PHP 5.1 (je suppose sans regarder la ligne).
J’ai testé la version de php actif et je suis en PHP Version 5.2.17. Je ne sais donc pas pourquoi j’ai ce message d’erreur ?
Si quelqu’un a une idée, merci d’avance.
Y a pas de raison... (http://www.phpfreaks.com/forums/php-coding-help/parse-error-syntax-error-unexpected-%27%27-expecting-t_variable-or-%27$%27-in-apag/) parle de la même erreur... mais pas sous PHP5.
La page
ecrire/?exec=info
du même SPIP qui a le plugin itérateurs en erreur indique bien cette version de PHP ?boulet , boulet, triple boulet que je suis, j’ai fait une faute de frappe mon mon fichier .htaccess pour déclarer ma version de php. Car chez OVH il faut impérativement choisir sa version de php que l’on veut.
Merci beaucoup à tous ceux qui mon répondu !
A+
Répondre à ce message
Bonjour, et merci pour ce formidable outil !
Juste une remarque :
Une fois activé sur une 2.1.0, il semble y avoir un problème sur la gestion des fichiers lang.
En effet, certains textes sont modifiés, comme par exemple :
« texte modifier article » au lieu de « Modifier l’article : » dans la page exec=articles_edit
Ou encore les boutons d’admin en public, comme « admin recalculer » au lieu de « recalculer cette page ».
Je vais jeter un coup d’oeil, mais si vous avez une piste...
Peux-tu confirmer que cette erreur est liée au plugin ? Je n’ai rien de tel chez moi.
Oui oui, en le désactivant, tout reviens dans l’ordre.
C’est peut-être du à une incompatibilité avec un autre plugin ?
Par ailleurs cela provoque des pétouilles avec le plugin forms&table(3.0.5), peut-être que l’incompatibilité vient de la...
En fait non, désactiver le plugin form & table ne change rien...
J’ai fait quelque tests sur plusieurs sites (de version différentes ), et le problème se reproduit à chaque fois, même sans autre plugin...
Je suis le seul à avoir ce souci ? c’est curieux quand même non ?
Du coup j’ai du le désactiver...
C’est pourtant un outil génial, j’aimerais juste savoir par ou commencer à chercher...les surcharge de public/ ?
Sam
Alors pour répondre à ta question : quelqu’un a eu le problème (akilo) mais pas avec les Itérateurs ! Il a eu le problème, comme ça, sans raison apparente, sans plugin, sur quelques chaines de langues de SPIP. De mémoire il a corrigé en réinstallant les fichiers de SPIP.
Pourrais tu nous dire ta version de PHP ? (exec=info dans le privé)
Bonjour Matthieu,
Ma version est la 5.1.6, j’ai testé et rencontré le même problème avec la 5.2.11...et c’est vraiment vraiment lier au plugin iterateur...
C’est toi sur la liste spip-zone ou c’est quelqu’un qui a le même souci ? http://thread.gmane.org/gmane.comp.web.spip.zone/21736
C’est peut être un problème de mémoire insuffisante ? ou de perte de langue parfois avec itérateurs ?
Tu testeras la version 0.2.4, sait-on jamais :)
@matthieu : C’est bien quelqu’un d’autre sur spip-zone et j’ai aussi le même souci que Yffic.
Je vais vite tester la mise à jour
Pas mieux pour moi en 0.2.5... :(
Concernant la mémoire, mon serveur est assez bien pourvu, donc je ne pense pas.
Alors résultat des courses :
Fonctionne à partir de la 2.1.6
Pour les sites antérieurs, rien à faire...
Répondre à ce message
Que de belles promesses avec ce plugin pour nos sites. Bravo.
J’ai tout de même d’ors et déjà 2 interrogations :
- Tout comme son ancêtre boucle_xml, est-il possible ou pas d’interroger des xml « distants », c’est à dire en mentionnant un lien http plutôt qu’une #CHEMINfichier_local.xml dans la boucle ? Astuces ? Hack ? Parce qu’en l’état, j’ai testé et ça me retourne un String could not be parsed as XML alors que le même fichier en local au moins ne fait pas râler spip.
- et deuxièmement, mais je n’ai peut-être pas encore tout assimilé, on peut utiliser un #TOTAL_BOUCLE pour compter le nombre d’occurences dans un fichier xml. Je suis tout sauf fortiche en XML, si vous avez un exemple de boucles qui feraient ça, je suis preneur.
Répondre à ce message
Bonjour,
j’ai installe le plugins dans spip2.1.8 et j’ai le message suivant
Parse error : parse error, expecting
T_VARIABLE' or
’$’’ in j :\serveur_eval\www\spipvttl\plugins\auto\iterateurs\iterateurs_fonctions.php on line 32Répondre à ce message
Hello
J’essaye d’insérer le formulaire issu du plugin Contacts Avancés dans un article en mettant dans la zone texte :
Avec uniquement « Contacts Avances » et Bonux, le formulaire s’affiche. Si j’active Iterateur, ca m’affiche ceci :
Spip et plugins svn frais d’hier
Celui là, je le reproduis...
Corrigé en version 0.2.4,
Merci.
Super, merci a toi
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |