Hola
J'ai besoin d'un coup de main avec une regexp concernant le filtre csv. Je suis une patate avec les regexps.
Ici
http://speciale.no-ip.info/LUISTEST/spip.php?article1
Je voudrais reconnaître les lignes suivantes
"Cette ligne devrait avoir une autre couleur et faire tout le widht"
"Cette ligne aussi devrait avoir une autre couleur et faire tout le widht"
histoire de les donner une classe et pouvoir les traiter avec des css.
Voici le fitre tel qu'on le trouve chez ecrire/inc/filtres.php
Et je pense qu'on devrait partir du if de // sauter la ligne de tete formee seulement de separateurs, mais j'en suis incapable.
<?php
// http://doc.spip.org/@filtre_text_csv_dist
function filtre_text_csv_dist($t)
{
$virg = substr_count($t, ',');
$pvirg = substr_count($t, ';');
$tab = substr_count($t, "\t");
if ($virg > $pvirg)
{ $sep = ','; $hs = ',';}
else { $sep = ';'; $hs = ';'; $virg = $pvirg;}
if ($tab > $virg) {$sep = "\t"; $hs = "\t";}
$t = str_replace('""','"',
preg_replace('/\r?\n/', "\n",
preg_replace('/\r/', "\n", $t)));
preg_match_all('/"[^"]*"/', $t, $r);
foreach($r[0] as $cell)
$t = str_replace($cell,
str_replace($sep, $hs,
str_replace("\n", "<br />",
substr($cell,1,-1))),
$t);
list($entete, $corps) = split("\n",$t,2);
$caption = '';
// sauter la ligne de tete formee seulement de separateurs
if (substr_count($entete, $sep) == strlen($entete)) {
list($entete, $corps) = split("\n",$corps,2);
}
// si une seule colonne, en faire le titre
if (preg_match("/^([^$sep]+)$sep+\$/", $entete, $l)) {
$caption = "\n||" . $l[1] . "|";
list($entete, $corps) = split("\n",$corps,2);
}
// si premiere colonne vide, le raccourci doit quand meme produire <th...
if ($entete[0] == $sep) $entete = ' ' . $entete;
if ($corps[strlen($corps)-1] <> "\n") $corps .= "\n";
return propre($caption .
"\n|{{" .
str_replace($sep,'}}|{{',$entete) .
"}}|" .
"\n|" .
str_replace($sep,'|',str_replace("\n", "|\n|",$corps)));
}
?>
D'autre part (je relance peut-être une discussion stérile, mais je n'ai pas compris qu'est ce qui se passe, donc vous n'êtes pas obligé de lire ce qui suit)
Si je télécharge un csv SPIP change le suffixe en txt (la seule manière d'avoir un suffixe csv c'est de passer par upload).
Pourquoi ?
Une fois téléchargés, le txt (via ecrire) et le csv via upload…
S'ils sont affichés directement dans le portfolio (sans inclusion)
Un click sur le txt l'affiche dans une nouvelle page
Un click sur le csv propose le téléchargement
Pourquoi ?
S'ils sont inclus par la balise <docxx|filtre>
Le txt aura un icône txt
Le csv aura un icône csv
Ceci dans l'espace publique et dans l'espace privé
OK.
S'ils sont inclus par la balise <embxx|filtre>, dans l'espace public
Le txt produit ce code
<pre>
Titre du tableau;;;;
Prix par (etc, etc… )
</pre>
Tout va bien.
Et le csv celui-ci
<table class="spip" summary="">
<caption>Titre du tableau</caption>
<thead>
<tr class='row_first'>
<th scope='col'>
<strong>Prix par <br />personne <br />en euros</strong>
</th>
<th scope='col'>
<strong>Le 05/01/08</strong>
</th><th scope='col'>
<strong>Les 12, 19, 26/01 et 2/02/08</strong>
</th>
<th scope='col'>
<strong>Les 9,16 et 23/02 et 1, 8, 15 et 22/03/08</strong>
</th>
<th scope='col'>
<strong>Le X novembre</strong>
</th>
</tr>
</thead>
<tbody>
<tr class="row_even">
<td>Séjour multi-activités 8 jours</td>
<td></td>
</tr>
<tr class="row_odd">
<td>Adulte en chambre double</td>
<td>1 290€</td>
<td>1 390€</td>
<td>1 495€</td>
<td>560€</td></tr>
<tr class="row_even">
(etc, etc… )
</tbody>
</table>
Tot va bien encore
Mais, dans l'espace privé par contre (ce qui est limite schizo !-) )
Le txt affiche
<pre/> et rien d'autre
Le csv affiche
<table class="spip">
<tbody>
<tr class="row_even">
<td>
</td>
</tr>
<tr class="row_odd">
</tr>
</tbody>
</table>
et rien d'autre.
Pourquoi ?
Merci d'avance
Luis
Je crois sincèrement que ça aiderait beaucoup de monde (en tout cas quand j'explique aux utilisateurs les raccourcis pour faire des tableaux ils ont des tournis. Avec mon système le problème est résolu en deux coups trois mouvements.