Archives FluxBB.fr

Les archives de FluxBB.fr

Recherche rapide

Vous n'êtes pas identifié(e).

Version 1.4.13 : [.tar.gz][.zip] (maj 20/10/2014)
Pack langue française pour 1.4.x : [.zip] (maj 06/01/2012)

Branche 1.5.x : fluxbb.org

Version 1.2.24 fr (entièrement en français) : [.zip] (maj 26/08/2011)
Pack langue française pour 1.2.x : [.zip] [.rar] (maj 15/10/2006)

Vous avez un problème ?
Avant de poser votre question sur les forums d'entraide nous vous invitons à consulter :

#1 11-11-2008 13:41:17

blark
Nouveau Membre

Créer un tableau en bbcode

bonjours,
comme il est mis dans le ttrre j aimerai savoir si il est possible de faire un tableau
en bbcode ou faut il obligatoirement installer le mod allowhtml?

merci d avance

Hors ligne

#2 12-11-2008 20:23:12

Mpok
Néo Admin

Re : Créer un tableau en bbcode

Bonjour,

Théoriquement, c'est faisable.. Mais c'est certainement galère à implémenter : il faut en effet gérer plusieurs balises imbriquées (tr, td, voire th, tbody, thead).
Note: dans la 1.3, on aura normalement les listes ordonnées, c'est déjà ça.


Life is a struggle, programming is a suffer.

Hors ligne

#3 06-09-2009 04:52:33

Super_baloo8
Membre

Re : Créer un tableau en bbcode

Salut à tous smile

Je suis en train de faire ces balise bbcode pour créer un tableaux. J'ai presque tout bon, sauf qu'il faudrait, pour éviter d'avoir à faire un bbcode sur une seule ligne pour un tableau,  que j'arrive à supprimer tous les espaces blanc (saut à la ligne + retour à la ligne compris) qui ne soit pas pris en compte entre mes deux balises.

Malgrès quelques essais, les regex, c'est pas encore ça chez moi.

Pour résumé, j'ai deux balises bbocode :

[tableau]blablalblalbalbalba[/tableau]

Je souhaiterais qu'à l'affichage du message, tout ce qui est contenu entre les balises "tableaux" ne contienne que du texte sans espaces blancs (ni saut de ligne, ni retour à la ligne).

Si vous savez comment faire, je suis preneur !

Merci !!!


[img]http://www.grid-france.fr/images/equipe/userbar_equipe_france_2.gif[/img] Équipe France

Hors ligne

#4 06-09-2009 09:45:33

Mpok
Néo Admin

Re : Créer un tableau en bbcode

Euhh... huh
1) Si tu supprimes TOUS les espaces, alors [c][td]Ceci est un test[/td][/c] va devenir  [c][td]Ceciestuntest[/td][/c], ce qui n'est pas le comportement voulu (non ?).
2) Ce qu'il faut supprimer (j'imagine) ce sont les espaces et les retours chariot ENTRE les balises [/td] et [td] (par exemple) mais pas entre les balises [td] et [/td]...

Une simple regexp du genre "[\n\s]*" est donc à proscrire (point 1), de même que la version plus évoluée "\][\n\s]*\[" (point 2).
Il faut (en partant de l'expression précédente) utiliser les assertions (cf. doc) pour différencier les cas où on veut supprimer les espaces des cas où on ne veut pas.

Donc il faudrait savoir ce que tu "supportes" dans ton code : [td] et [tr] évidemment, mais quid de [tbody], [thead] et [th] ?

Autre question (subsidiaire) : comment traites-tu la validité du tableau ? (les imbrications valides ou pas)


Life is a struggle, programming is a suffer.

Hors ligne

#5 06-09-2009 17:20:48

Super_baloo8
Membre

Re : Créer un tableau en bbcode

Merci pour ta réponse, tu as juste.

Les espaces ne doivent pas être supprimés, et ne gène en rien le code html.

Peut être que je peux faire plus simple, c'est de ne pas transformer les retours chariot en " <br />".

Mais je n'arrive pas bien à cerner le parsage, car je ne trouve nul part la fonction dédié à ça (nl2br).

Il faudrait que j'arrive tout simplement a ne pas faire fonctionner le nl2br lors du parsage entre les balises "[ tableau ]" et le reste ça devrait être facile !

J'utilise les balise html "table", "tr", "td" & "th".

la balise tbody s'ajoute toute seule, mais je ne sais pas d'où ça vient, surement la configuration serveur, pourtant il ne me semble pas que j'ai activé tidy...

Pour la balise thead (entête du tableau), pour l'instant elle n'existe pas. Mais elle pourrait exister si j'arrive à ne pas avoir les <br /> (en la rajoutant avec par exemple un ajout de balise "[ ens_titre ]" qui délimiterais les titres du tableau)

Exemple en ligne, ça sera plus parlant :

http://www.grid-france.net/forum/suivi3 … html#p3258

J'ai inclus le bbcode associé, le résultat, ainsi que le code que j'ai modifié du parseur pour obtenir ça.

Pour la validité du code tu tableaux, pratiquement toutes les imbrications sont possible. Mais pour des raisons de simplicité, les tableaux qui seront sur le forum sont là pour affichée des données sous présentation tabulaire (comme l'exemple en ligne), pas plus, donc, ça devrait le faire côté validité syntaxique.


[img]http://www.grid-france.fr/images/equipe/userbar_equipe_france_2.gif[/img] Équipe France

Hors ligne

#6 07-09-2009 14:36:27

Mpok
Néo Admin

Re : Créer un tableau en bbcode

Super_baloo8 a écrit :

Mais je n'arrive pas bien à cerner le parsage, car je ne trouve nul part la fonction dédié à ça (nl2br).

En fait c'est un str_replace, dans la fonction parse_message (il y a un commentaire explicite "Deal with newlines").

Il faudrait peut-être transformer ça en un preg_replace, ce qui permettrait éventuellement d'exclure le traitement à l'intérieur de ton tableau (c'est à dire d'exclure les "\n" qui se trouvent entre <table> et </table).
Il reste plus qu'à trouver la bonne regexp pour faire ça roll (euh.. j'ai essayé, mais je n'ai pas trouvé.. en fait je sais faire le contraire, c'est dire adresser les \n à l'intérieur du tableau, mais quand j'essaie d'inverser, ça merde..).


Life is a struggle, programming is a suffer.

Hors ligne

#7 08-09-2009 21:00:49

Super_baloo8
Membre

Re : Créer un tableau en bbcode

Ca y est, j'y suis arrivé, et ... bordel, c'est le beau mer*ier !

Merci pour ton aide MpoK, en m'indiquant où se faisaient les retours à la ligne !

Pour la validité des tableaux, syntaxiquement parlant, avec le tbody qui commence après table, et finis avant /table, ça passe au validateur.

Alors, au niveau du parser.php, j'avais installé une mod, ou trouvé des morceaux, je ne sais plus où (pour intégrer une coloration syntaxique dans les 'code').

Et ça m'avais pas mal modifier le parseur, en le décomposant.

//
// Parse message text
//
function parse_message($text, $hide_smilies)
{
  global $pun_config, $lang_common, $pun_user;
  //split a message to parts of (text,codename,code, empty) etc...
  $parts = preg_split('#\n?\[\/?code=?(.*?)\]\n?#is', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
  $codename = '';
  $text = '';
  $idx = 0;
  foreach ($parts as $value)
  {
    $idx++;
    switch ($idx)
    {
      case 1:
          $morceaux = preg_split('#\n?\[\/?tableau\]\n?#is', $value, -1, PREG_SPLIT_DELIM_CAPTURE);
          $id = 0;
          foreach ($morceaux as $valeur)
          {
            $id++;
            switch ($id)
            {
              case 1:
                $text.= parse_part($valeur, $hide_smilies, TRUE);
                break;
              case 2:
                $text.= parse_part('[tableau]'.$valeur.'[/tableau]', $hide_smilies, FALSE);
                $id = 0;
                break;
            }
          }
        break;
      case 2:
        $codename = $value;
        break;
      case 3:
        $text.= parse_code($codename, $value);
        break;
      case 4:
        $codename = $value;
        $idx = 0;
        break;
    }
  }

  // Add paragraph tag around post, but make sure there are no empty paragraphs
  $text = str_replace('<p></p>', '', '<p>'.$text.'</p>');
  return $text;
}
//
// Parse part message text
//
function parse_part($text, $hide_smilies, $w_br)
{
  global $pun_config, $lang_common, $pun_user;

  if ($pun_config['o_censoring'] == '1')
    $text = censor_words($text);

  // Convert applicable characters to HTML entities
  $text = pun_htmlspecialchars($text);

  if ($pun_config['o_make_links'] == '1')
    $text = do_clickable($text);

  if ($pun_config['o_smilies'] == '1' && $pun_user['show_smilies'] == '1' && $hide_smilies == '0')
    $text = do_smilies($text);

  if ($pun_config['p_message_bbcode'] == '1' && strpos($text, '[') !== false && strpos($text, ']') !== false)
  {
    $text = do_bbcode($text);
    if ($pun_config['p_message_img_tag'] == '1')
    {
//      $text = preg_replace('#\[img\]((ht|f)tps?://)([^\s<"]*?)\.(jpg|jpeg|png|gif)\[/img\]#e', 'handle_img_tag(\'$1$3.$4\')', $text);
      $text = preg_replace('#\[img\]((ht|f)tps?://)([^\s<"]*?)\[/img\]#e', 'handle_img_tag(\'$1$3\')', $text);
    }
  }

  if($w_br == TRUE)
    {
    // Deal with newlines, tabs and multiple spaces
    $pattern = array("\n", "\t", '  ', '  ');
    $replace = array('<br />', '    ', '  ', '  ');
    }
    else
        {
        // Deal with newlines, tabs and multiple spaces
        $pattern = array("\t", '  ', '  ');
        $replace = array('    ', '  ', '  ');
        }
  $text = str_replace($pattern, $replace, $text);
  return $text;
}
//
// Parse part code text
//
function parse_code($codename, $code)
{
  global $pun_config, $lang_common, $pun_user;
  
  if(!empty($codename))
    {
    $codename = strtolower($codename);

    return '</p><div class="codebox"><pre class="brush: '.$codename.';">'.pun_htmlspecialchars($code).'</pre></div><p>';
    }
    else
    {
    return '</p><div class="codebox"><pre class="brush: plain;">'.pun_htmlspecialchars($code).'</pre></div><p>';
    }    
}

Ensuite, au niveau du parseur bbcode(), j'ai juste ajouté ces balises :

                     '#\[tableau\](.*?)\[/tableau\]#s',
                     '#\[ligne\](.*?)\[/ligne\]#s',
                     '#\[cellule_titre\](.*?)\[/cellule_titre\]#s',
                     '#\[cellule\](.*?)\[/cellule\]#s',

Avec leur équivalents

                     '</p><table class="bbcode" cellspacing="0">$1</table><p>',
                     '<tr>$1</tr>',
                     '<th class="tcr" scope="col">$1</th>',
                     '<td class="tcr">$1</td>',

Ce qui fait que maintenant ce code :

[tableau]

[ligne]
[cellule_titre]- Titre 1 -[/cellule_titre]
[cellule_titre]- Titre 2 -[/cellule_titre]
[cellule_titre]- Titre 3 -[/cellule_titre]
[/ligne]

[ligne]
[cellule]Contenu de ma cellule 1[/cellule]
[cellule]Contenu de ma cellule 2[/cellule]
[cellule]Contenu de ma cellule 3[/cellule]
[/ligne]

[ligne]
[cellule]Contenu de ma cellule 1, sur ma ligne 2[/cellule]
[cellule]Contenu de ma cellule 2, sur ma ligne 2[/cellule]
[cellule]Contenu de ma cellule 3, sur ma ligne 2[/cellule]
[/ligne]

[/tableau]

Me crée un tableau, sans les <br /> partout avant !

Dernière modification par Super_baloo8 (08-09-2009 21:02:25)


[img]http://www.grid-france.fr/images/equipe/userbar_equipe_france_2.gif[/img] Équipe France

Hors ligne

#8 17-11-2009 18:40:19

spawns
Membre

Re : Créer un tableau en bbcode

intéressant,
mais ou faut il placer le code dans le fichier parser.php
est ce du code a ajouter ou a remplacer.
notamment concernant les 3 premiers code.

Merci

Dernière modification par spawns (17-11-2009 18:42:43)

Hors ligne

#9 11-12-2009 20:30:50

Super_baloo8
Membre

Re : Créer un tableau en bbcode

Il faut remplacer la fonction "parse_message", par les trois fonctions écrite ci-dessus il me semble de mémoire wink

Dernière modification par Super_baloo8 (11-12-2009 20:31:18)


[img]http://www.grid-france.fr/images/equipe/userbar_equipe_france_2.gif[/img] Équipe France

Hors ligne

Pied de page des forums