Fichier CSV vers SPIP - commentaires Fichier CSV vers SPIP 2010-09-15T17:17:47Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment434473 2010-09-15T17:17:47Z <p>oups j'ai rien dit, la nouvelle version spip gérant les CSV..</p> Fichier CSV vers SPIP 2010-09-15T16:00:38Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment434469 2010-09-15T16:00:38Z <p>Regarde le plugin <a href="http://www.spip-contrib.net/odt2spip-creation-d-articles-a-partir-de-fichiers" class="spip_out" rel='nofollow external'>odt2spip</a></p> Fichier CSV vers SPIP 2010-09-15T15:32:41Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment434464 2010-09-15T15:32:41Z <p>salut<small class="fine d-inline"> </small>!</p> <p>ya moyen d'avir une mise à jour pour spip 2 et 2.1<small class="fine d-inline"> </small>??</p> <p>codialement</p> Fichier CSV vers SPIP 2008-09-26T16:45:31Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment408821 2008-09-26T16:45:31Z <p>Oups, j'ai oublié de préciser que les effets visuels (verticaux/horizontaux) sont obtenus par les classes CSS : row_odd/row_even (conforme spip) et col_odd/col_even.</p> <p>J'ai mis les titres dans des cellules 'th' plutôt que 'td' (ça évite de définir la classe row_first qui n'avait plus de sens vu que les titres ne sont plus forcément en première ligne et/ou colonne.</p> Fichier CSV vers SPIP 2008-09-26T16:40:30Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment408820 2008-09-26T16:40:30Z <p>J'ai modifié le code de la façon suivante :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><? /* * +----------------------------------+ * Nom du Filtre : tableau csv vers spip * +----------------------------------+ * Date : lundi 13 février * Auteur : "gpl" : gpl@macplus.org * Christophe Vanackère : vanackere@provita.fr * Date : vendredi 26 septembre 2008 * Auteur : Fred * Frédéric Bonnaud : frederic.bonnaud chez laposte fr * Modification : le paramètrage du tableau est passé à la fonction * plutot que dans le tableau (ça permet d'importer des tableaux qui * ne sont pas prévus pour cela. * +-------------------------------------+ * Fonctions de ce filtre : * Il sert à intégrer un fichier csv en document joint sous forme de tableau mis en page Particularités : Respecte les styles spip (titre-alternance des lignes) et permet aussi les alternances de colonnes. Gère les sauts de ligne manuels (je ne sais pas) Gère la largeur relative des tableaux Permet de forcer une disposition visuellement verticale ou horizontale. Permet de donner un titre au tableau (conforme aux tableaux spip) Permet d'avoir plusieurs lignes/colonnes de titres Choix automatique de la disposition horizontale/verticale en fonction des titres Par défaut, la disposition est horizontale * +-------------------------------------+ * Inspiré par une contribtion de Jean-Jacques (http://www.spip-contrib.net/ecrire/?exec=articles&id_article=1236) * Pour toute suggestion, remarque, proposition d'ajout * reportez-vous au forum de l'article : * http://www.uzine.net/spip_contrib/article.php3?id_article=62 */ function csvclass($classes) { foreach($classes as $id => $class) { if ($class==='') { unset($classes[$id]) ; } } return (count($classes)?" class='".join(" ",$classes)."'":'') ; } function tableurcsv($fichier, $avec_titre='HV', $largeurs='', $alignements='', $largeurmax='100%', $force_disposition='', $caption=''){ /* ouverture du fichier CSV */ $fic = @fopen ($fichier,"rb") or die ("Impossible d'ouvrir le fichier $fichier"); $lignes=0; // compteur de lignes // chargement des données des lignes/cellules while ($data = @fgetcsv ($fic, 1024, ";")) { // on lit chaque ligne $num = count ($data); // nbr enregistrements par ligne for ($c=0; $c<$num; $c++) { // on lit chaque cellule $tabfic[$lignes][$c]=$data[$c]; // on met dans le tableau } $lignes++; // incrementation du nombre de lignes } // on ferme le fichier fclose ($fic); //construction du tableau $result =""; //largeurs $largeurs=split("\s*;\s*", trim($largeurs)) ; $largeur = array_sum($largeurs) ; $largeur=($largeur?$largeur:1); //alignements des colonnes $align=split("\s*;\s*", trim($alignements)) ; //debut du tableau $result .= "<table class='spip' width='".$largeurmax."' align='center'>\n"; //peut être paramétré par css if ($caption) { $result .= "<caption>$caption</caption>\n" ; } $maligne=1; $titres = split("\s*;\s*", trim($avec_titre)) ; $titres_lc = array() ; $table_verticale=$table_horizontale=false ; foreach($titres as $titre) { if (preg_match("/^(l|c)(\d+)$/i", strtolower($titre), $match)) { $titres_lc[$match[0]] = true ; ($match[1] == 'l') && ($table_verticale = true) ; ($match[1] == 'c') && ($table_horizontale = true) ; } } $rowstyle="row_odd"; if (!$table_horizontale && !$table_verticale) { $table_horizontale=true ; } if (strpos(strtolower($force_disposition),"horiz")===0) { $table_horizontale=true ; $table_verticale=false ; } elseif (strpos(strtolower($force_disposition),"vertic")===0) { $table_horizontale=false ; $table_verticale=true ; } // lecture des lignes for ($ligne=$maligne ; $ligne<=$lignes ; $ligne++) { //petit truc pour les styles alternés if ($table_horizontale) { if ($rowstyle=="row_odd") { $rowstyle="row_even"; } else { $rowstyle="row_odd"; } } else { $rowstyle="" ; } $result .= "<tr".csvclass(array($rowstyle)).">\n"; //lecture des cellules $colstyle="col_even" ; for ($colonne=1 ; $colonne<=$num ; $colonne++) { if ($table_verticale) { if ($colstyle=="col_odd") { $colstyle="col_even"; } else { $colstyle="col_odd"; } } else { $colstyle="" ; } //calcul des largeurs $largcol = ($largeurs[$colonne-1]/$largeur)*100; //alignements switch (TRUE) { case (strtolower($align[$colonne-1]) == "c"): $talign="align-center"; break; case (strtolower($align[$colonne-1]) == "d"): $talign="align-right"; break; default: $talign="align-left"; break; } //saut de ligne manuel? $cellule=$tabfic[$ligne-1][$colonne-1]; $cellule = str_replace("\n","<br/>", $cellule); if ($titres_lc["c".$colonne] || $titres_lc["l".$ligne]) { $balise="th" ; } else { $balise="td" ; } $result .= "<$balise width='$largcol%'".csvclass(array($colstyle,$talign)).">$cellule</$balise>\n"; } $result .= "</tr>\n"; } $result .= "</table>\n"; return $result; } ?></code></pre></div> <p>Et j'utilise cela avec spip 1.9.2 et un modèle du type :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_documentCSV(DOCUMENTS){id_document=#ENV{id}}{doublons}{extension=csv}> #SET{titre,(#TITRE|supprimer_numero)} [(#URL_DOCUMENT|tableurcsv{#ENV{titres},#ENV{largeurs},#ENV{alignements},#ENV{largeur},#ENV{disposition},#GET{titre}})] </BOUCLE_documentCSV></code></pre></div> <p>Ce qui permet des appels du type :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><csv 115 |largeur=40% |largeurs=15;10;10;10 |alignements=g;c;c;c |titres=l1;c1;c4></code></pre></div> <p>pour mettre des titres sur la ligne 1 et sur les colonnes 1 et 4<br class="autobr"> ou :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><csv 115 |largeur=40% |largeurs=15;10;10;10 |alignements=g;c;c;c |disposition=verticale></code></pre></div> <p>pour forcer une disposition verticale</p> Fichier CSV vers SPIP 2008-05-26T15:48:53Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment406380 2008-05-26T15:48:53Z <p>très bonne contrib. J'errai sur <a href="http://www.spip-contrib.net/Macro-Word" class="spip_out" rel='nofollow external'>macro word</a> et je suis arrivé ici... avec les mêmes problèmes :</p> <p>l'idée est de gérer des tableaux un peu plus évolués. Visiblement CSV ne gère pas les fusions de cellules (colspan et rowspan). Or spip le fait via <code class="spip_code spip_code_inline" dir="ltr">|<|</code> & <code class="spip_code spip_code_inline" dir="ltr">|^|</code><br class="autobr"> (respectivement colspan et rowspan).</p> <p>Je me demandais si l'on pouvait procéder exactement de la même façon : on intègre un petit « <code class="spip_code spip_code_inline" dir="ltr"> < </code> » dans le csv (entre les points virgules) et on l'interprète dans mes fonctions.</p> <p>Est-ce la bonne voie<small class="fine d-inline"> </small>?</p> Fichier CSV vers SPIP 2007-06-01T13:25:23Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment394454 2007-06-01T13:25:23Z <p>Bonjour,</p> <p>Appelle-tu ton modèle dans ton article par <code class="spip_code spip_code_inline" dir="ltr"><doc_csvXX></code><small class="fine d-inline"> </small>? (XX = n° du document) par exemple.</p> Fichier CSV vers SPIP 2007-06-01T13:02:41Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment394451 2007-06-01T13:02:41Z <p>Bonjour,</p> <p>J'ai un souci, je n'arrive pas a faire fonctionner cette fonction. Voici ce que j'ai fait avec la version 1.9 de SPIP : <br>- insertion dans la base de donnees de <br class="autobr"> titre : CSV <br class="autobr"> extension : csv <br class="autobr"> inclus : embed <br class="autobr"> upload : oui <br>- Ajout de la fonction dans mes_fonctions.php <br>- Dans dist/modeles creation de doc_csv.html avec <br class="autobr"> </p> <h4><abbr title="supprimer_numero)">(#TITRE</abbr></h4> <p>[(#DESCRIPTIF)]</p> <abbr title="tableurcv)">(#URL_DOCUMENT</abbr> <div class="clear"> </div> <p> <br>- Ensuite lorsque j'ecris un article je joins mon document csv et dans l'article je tape </p> <p>Lorsque je vais dans la partie publique je ne vois pas mon tableau, je ne vois que l'icone du document que l'on peut telecharger.</p> <p>Ou est mon erreur<small class="fine d-inline"> </small>?<br class="autobr"> Que faut il faire en plus<small class="fine d-inline"> </small>?</p> Fichier CSV vers SPIP 2007-05-11T22:13:16Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment393775 2007-05-11T22:13:16Z <p>Je me répond à moi même. Si ca peut aider quelqu'un.</p> <p>Remplacer cette ligne :</p> <p>$tabfic[$lignes][$c]=$data[$c]<small class="fine d-inline"> </small>; // on met dans le tableau</p> <p>Par cette ligne :</p> <p>$tabfic[$lignes][$c]=utf8_encode($data[$c])<small class="fine d-inline"> </small>; // on met dans le tableau</p> Fichier CSV vers SPIP 2007-05-11T20:09:51Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment393772 2007-05-11T20:09:51Z <p>Merci pour cette contrib<small class="fine d-inline"> </small>!</p> <p>Quelqu'un connait une manière facile de lui faire accepter les accents<small class="fine d-inline"> </small>?</p> <p>Merci<small class="fine d-inline"> </small>!</p> Fichier CSV vers SPIP 2007-04-15T20:27:05Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment392995 2007-04-15T20:27:05Z <p>Juste oublié la signature du post</p> Fichier CSV vers SPIP 2007-04-15T20:25:55Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment392994 2007-04-15T20:25:55Z <p>Bonjour,</p> <p>J'ai récemment approfondi, grace à l'aide de Marabbeh (voir plus bas). D'où une amorce de plugin qui n'est pas encore suscptible d'être diffusé en état, mais qui peut rendre service. Envoyez-moi un message en MP. J'envoie le fichier dès que je j'aurai un peu nettoyé.</p> Fichier CSV vers SPIP 2007-04-14T15:37:09Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment392964 2007-04-14T15:37:09Z <p>Bonjour,</p> <p>Il ne s'agit pas encore d'un plugin. Le mode opératoire est détaillé dans l'article. Dis nous plutôt ce que tu as fait pour que ça ne fonctionne pas<small class="fine d-inline"> </small>!</p> Fichier CSV vers SPIP 2007-04-14T13:53:30Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment392960 2007-04-14T13:53:30Z <p>Bonjour,</p> <p>je débute sous spip, et ce plugin m'interesse. Je l'ai installé mais je n'arrive pas à afficher le csv dans l'article. J'ai du raté un truc lors de l'instal, mise en ligne et tout mais je sais pas quoi. <br class="autobr"> Si quelqun pouvait expilquer étape par étape comment installer et faire fonctionner ce plugin, ca serait génial.</p> <p>Merci</p> Fichier CSV vers SPIP 2007-02-15T11:08:50Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment391175 2007-02-15T11:08:50Z <p>Dans mon squelette, le critère <i>doublons</i> ne sert à rien. Puisque c'est dans un modèle et pas dans le squelette. D'ailleurs ça peut poser un problème. Mais dans mon cas, ça ne me gène pas d'afficher le document .csv d'origine.</p> <p>Une autre suggestion :<br class="autobr"> Si votre fichier .xls contient des urls (<a href="http://www.mon-domaine.tld" class="spip_url spip_out auto" rel="nofollow external">http://www.mon-domaine.tld</a> ou maito:mon-adresse@email.tld), ces adresses seront affichées telles quelles dans le fichier .csv, puis dans le tableau Spip. Pour en faire des liens cliquables, il faut ajouter une fonction :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>function tableurcsv_formate_cellule($cellule, $url_max=25) { // formate le contenu de la cellule // change url en <a href="url">url</a> (et coupe à $url_max cars si plus long) $re_url = "(?:(?:(?:ht|f)tps?)\:\/\/)?(?:(?:[a-zA-Z0-9]+(?:[@\-\.]?[a-zA-Z0-9]+)*)(?:\:[a-zA-Z0-9\-\.]+)?@)?(?:www.|ftp.|[a-zA-Z]+.)?[a-zA-Z0-9\-\.]+\.(?:[a-zA-Z]{2,})(?:\:[0-9]+)?\/?"; ; $re_email = "mailto:[\w|-]+(?:\.[\w|-]+)*@[a-z0-9-]+(?:\.[a-z0-9-]+)+"; if (preg_match("/(?:" . $re_url . "|" . $re_email. ")/", $cellule, $regs)) { $url = (strlen($regs[0]) > $url_max) ? substr($regs[0], 0, $url_max) . '...' : $regs[0]; $cellule = str_replace($regs[0], '<a href="' . $regs[0] . '">'. $url . '</a>', $cellule); } return $cellule; }</code></pre></div> <p>Puis modifier le filtre tableurcsv() tout à la fin. Remplacer :</p> <p><code class="spip_code spip_code_inline" dir="ltr">$result .= "<td width='".$largcol."%' align='".$talign."' nowrap> ".$cellule." </td>\n";</code></p> <p>Par :</p> <p><code class="spip_code spip_code_inline" dir="ltr">$result .= "<td width='".$largcol."%' align='".$talign."' nowrap> ".tableurcsv_formate_cellule($cellule)." </td>\n";</code></p> <p>La fonction tableurcsv_formate_cellule() est à mettre aussi dans mes_fonctions.php.</p> <p>Dans cette fonction, le paramètre $url_max permet de limiter la taille du lien, s'il risque de prendre toute la largeur du tableau. Mais l'url de redirection reste intacte.</p> Fichier CSV vers SPIP 2007-02-14T13:03:55Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment391141 2007-02-14T13:03:55Z <p>Merci beaucoup, je regardais comment porter cette contrib vers des versions 1.9x. Je n'avais pas pensé au modèle.</p> Fichier CSV vers SPIP 2007-02-14T10:01:39Z https://contrib.spip.net/Fichier-CSV-vers-SPIP#comment391130 2007-02-14T10:01:39Z <p>Très intéressante cette contrib. J'ai fait un petit essai, ça marche bien.</p> <p>Une petite erreur :</p> <p><code class="spip_code spip_code_inline" dir="ltr">$result .= "<td width='".$largcol."%' align='".$talign."' nowrap> ".$cellule." </td>\n";</code></p> <p>cad mettre un espace devant nowrap.</p> <p>J'ai aussi essayé d'en faire un modèle. Cad au lieu de mettre la boucle présentée ci-dessus dans le squelette, le rédacteur peut indiquer lui-même, dans l'article, l'endroit où il va mettre son tableau, avec la balise <code class="spip_code spip_code_inline" dir="ltr"><docXXX|csv></code>.</p> <p>Voici le modèle doc_csv.html (quasiment la boucle de la contrib) :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_documentCSV(DOCUMENTS){id_document}{doublons}{extension=csv}> <h4>[(#TITRE|supprimer_numero)]</h4> <p>[(#DESCRIPTIF)]</p> <dt>[(#URL_DOCUMENT|tableurcsv)]</dt> <div class="clear"> </div> </BOUCLE_documentCSV></code></pre></div> <p>à mettre dans le dossier squelettes/modeles/</p>