Dans une récente contribution Jacques J. proposait d’intégrer un tableau issu d’un fichier csv dans un article. Pour cela, il utilisait une boucle gérant les documents joints du type csv.
Le principe a été repris dans la contribution proposée ici.
1 – Préparation de la base
Comme indiqué dans la précédente contribution, SPIP n’accepte pas par défaut les fichiers csv en téléchargement.
Pour cela, il faut suivre la procédure décrite dans l’article correspondant sur www.spip.net
Par ftp, créer un répertoire csv dans /IMG/, et ne pas oublier de régler les droits d’écriture…
2 – La fonction
Elle s’inspire à la fois de la contribution de Jacques J., et de routines présentées notamment sur nexen.net.
Vous pouvez l’installer dans mes_fonctions.php3 comme à l’accoutumée. Voici les explications pas à pas :
Dans un premier temps, le filtre va ouvrir le fichier que vous avez téléchargé.
Il va lire les lignes une à une et les placer dans un tableau
L’apport principal de cette contribution est de permettre au créateur du fichier csv de « préprogrammer la mise en page ». En effet, il peut renseigner son fichier dont la structure ressemble à ceci :
Les variables pouvant être modifiées sont :
largeur totale du tableau dans la mise en page du squelette (en relatif ou en absolu)
présence d’une entete
l’alignement de chacune des colonnes
la largeur relative des colonnes, afin d’équilibrer le tableau
A noter que le filtre traite les retours de ligne générés sous Excel par la combinaison de touches ALT + Retour
Il va récupérer dans les lignes 1 et 2 les paramétrages du tableau :
rang 1 col 2 : largeur du tableau
rang 2 col 2 : existence d’une entete de tableau
S’il y a une entete, il va la traiter spécifiquement en lui affectant le style ad hoc.
Les autres lignes du tableau seront traitées en reprenant, cellule par cellule, les éléments situés dans la même colonne en rang 3 (largeur de la cellule) et 4 ( alignement).
A noter que le fichier d’exemple fourni au format xls comporte une fonction, en rang 3, qui affiche automatiquement la largeur de la colonne.
On notera au passage un « petit bricolage » permettant de traiter correctement les styles spip des tableaux :
La boucle document à utiliser est du type :
Vous trouverez dans l’archive :
le fichier mes_fonctions.php3.txt (extension en .txt par sécurité pour les manœuvres hatives)
un modèle de tableau au format .xls
un modèle de tableau au format .csv
Extension : adapter cette contribution pour traiter des balises de documents directement inclus dans les articles, mais vraisemblablement, cela nécessiterait une intervention sur le coeur du code.
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.
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.
<?
/*
* +----------------------------------+
* 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
}
très bonne contrib. J’errai sur macro word et je suis arrivé ici... avec les mêmes problèmes :
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 |<| & |^|
(respectivement colspan et rowspan).
Je me demandais si l’on pouvait procéder exactement de la même façon : on intègre un petit " < " dans le csv (entre les points virgules) et on l’interprète dans mes fonctions.
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 :
insertion dans la base de donnees de
titre : CSV
extension : csv
inclus : embed
upload : oui
Ajout de la fonction dans mes_fonctions.php
Dans dist/modeles creation de doc_csv.html avec
[(#TITRE|supprimer_numero)]
[(#DESCRIPTIF)]
[(#URL_DOCUMENT|tableurcv)]
Ensuite lorsque j’ecris un article je joins mon document csv et dans l’article je tape
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.
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é.
le plugin accés par groupes permet de restreindre l’accès à des rubriques et leurs contenus en gérant des groupes d’utilisateurs autorisés. A la différence du plugin "accés restreint", le filtrage est appliqué aussi bien dans l’espace privé que (...)
PGN_VIEWER pour Spip - PGN_VIEWER pour Spip est un script PHP facile à intégrer dans Spip et qui permet d’afficher des parties des échecs dans les articles, tout en facilitant la tâche aux auteurs qui trouvent du mal à le faire traditionnellement .. (1)
Utilisant (...)
Le squelette EasySqueletting est un squelette de type généraliste, il propose une navigation sur 2 à 3 colonnes ainsi qu’une navigation horizontale par onglets. Les onglets sont des liens vers des rubriques que vous pouvez sélectionner (...)