[spip-dev] Un coup de main et un truc qu je n'ai pas compris (csv le retour II ; -) )

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 = '&#44;';}
  else { $sep = ';'; $hs = '&#59;'; $virg = $pvirg;}
  if ($tab > $virg) {$sep = "\t"; $hs = "\t";}

  $t = str_replace('""','&#34;',
       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&nbsp;290€</td>
    <td>1&nbsp;390€</td>
    <td>1&nbsp;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

J'ai réussi à faire ce que je voulais et j'ai crée un ticket

http://trac.rezo.net/trac/spip/ticket/1513

L'idée serait de proposer après le téléchargement d'un fichier txt ou csv (exporté d'un tableur), d'un raccourci (un peu à la manière de emb) qui indiquerait la possibilité de que ce texte soit traité comme un tableau. Style "Voulez-vous que ce texte soit affiché comme un tableau ?".

Et j'ai ajouté les modifs (en fichiers joints) du filtre csv et de spip_style.css

Au moins maintenant c'est clair ce que je propose :wink: 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.

Merci

Luis

* Luis Speciale tapuscrivait, le 08/09/2008 12:56:

J'ai réussi à faire ce que je voulais et j'ai crée un ticket

http://trac.rezo.net/trac/spip/ticket/1513

L'idée serait de proposer après le téléchargement d'un fichier txt ou csv (exporté d'un tableur), d'un raccourci (un peu à la manière de emb) qui indiquerait la possibilité de que ce texte soit traité comme un tableau. Style "Voulez-vous que ce texte soit affiché comme un tableau ?".

Et j'ai ajouté les modifs (en fichiers joints) du filtre csv et de spip_style.css

Au moins maintenant c'est clair ce que je propose :wink: 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.

Sauf que du coup, pour modifier une valeur dans un tableau, ben il faut :
1) modifier le fichier dans le tableau
2) exporter en CSV
3) importer le doc dans SPIP
4) lui mettre le titre/descriptif de l'ancien
5) chercher toutes les occurrence de <embNNancien> pour les remplacer par <embNNnouveau>
6) éventuellement supprimer l'ancien

Alors, finalement, les raccourcis typo de SPIP, c'est pas si mal :wink:

RealET a écrit :

* Luis Speciale tapuscrivait, le 08/09/2008 12:56:

J'ai réussi à faire ce que je voulais et j'ai crée un ticket

http://trac.rezo.net/trac/spip/ticket/1513

L'idée serait de proposer après le téléchargement d'un fichier txt ou csv (exporté d'un tableur), d'un raccourci (un peu à la manière de emb) qui indiquerait la possibilité de que ce texte soit traité comme un tableau. Style "Voulez-vous que ce texte soit affiché comme un tableau ?".

Et j'ai ajouté les modifs (en fichiers joints) du filtre csv et de spip_style.css

Au moins maintenant c'est clair ce que je propose :wink: 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.

Sauf que du coup, pour modifier une valeur dans un tableau, ben il faut :

Un tableau ou une image, c'est pareil pour l'utilisateur. S'il a fait son image avec Photoshop il va pas la modifier avec SPIP

1) modifier le fichier dans le tableau
2) exporter en CSV
3) importer le doc dans SPIP

Et alors ?

4) lui mettre le titre/descriptif de l'ancien

Pas besoin. La première ligne est traité (si elle a une seule cellule) comme caption, sinon on pase directe aux th.

5) chercher toutes les occurrence de <embNNancien> pour les remplacer par <embNNnouveau>
6) éventuellement supprimer l'ancien

Alors, finalement, les raccourcis typo de SPIP, c'est pas si mal ;-

Je ne dis pas le contraire. Pour nous c'est facile. Pour une personne qui fait (ou modifie) 20 tableaux par jour dans son tableur, je peux te garantir que c'est un soulagement de savoir qu'il suffit de l'exporter, télécharger, l'inclure et basta. Le tour est joué. Au moins que je ne tombe sur des récalcitrants aux nouvelles technologies, c'est ce que je présumme comme une généralité.

A+

Luis