Page 1 sur 2

Les retours a la ligne

Posté : 18 avr. 2012, 05:45
par rimie
Bonjour,

je fais une liste pour un code BBCode:

Code : Tout sélectionner

<img src="form/list_unordered.png" align="absmiddle" width="20" height="20" style="cursor: pointer;" onclick="insertTag('[ul]<?php echo '\n'; ?>[li]','Text1[/li]<?php echo '\n'; ?>[/ul]','textarea');" title = "Liste Simple" />
le code s'insere au textarea comme suite:

Code : Tout sélectionner

[ul] [li]Text1[/li] [/ul]
comme vous voyez les retours a la ligne apres [ul] et avant [/ul], si j'insere un nouveau text (Text2), ca me donne 2 sauts a la ligne, et entre une liste (2 ul) ca me donne 4 sauts a la ligne

Je parse mon code comme suite:

Code : Tout sélectionner

<?php         // parser le code         public final function bbcode() {             $tags = array(                 '\[ul\](.*?)\[\/ul\]' => '<ul>$1</ul>',            '\[ol\](.*?)\[\/ol\]' => '<ol>$1</ol>',            '\[li\](.*?)\[\/li\]' => '<li style="list-style-image: url(\'font_size.png\');">$1</li>',            '\[li=1\](.*?)\[\/li\]' => '<li>$1</li>', ); // closed array                         $this->tags = $tags;                              foreach($this->tags as $k=>$v)        {               $this->text = preg_replace('/'.$k.'/', $v , $this->text);                  }                $this->newText = $this->text;                return($this->newText); } // end function ?>
et je recupere la previsualisation:

Code : Tout sélectionner

$formatageCols    = Isset($_POST['formatageCols'])    ? nl2br($_POST['formatageCols'])    : $formatageCols = Null; include '../Classes/class_bbcode.php'; $f =  new BBCode($formatageCols); $formatageCols = $f->bbcode();              $return_arr["formatageCols"] = $formatageCols;         echo json_encode($return_arr);  

comment puis je faire pour eviter les multitudes saut de lignes et avoir une bonne mise en forme, le probleme est cause par le premier code HTML

merci

Re: Les retours a la ligne

Posté : 18 avr. 2012, 06:49
par moogli
Salut,

Si j'ai bien compris, ce qui te gêne c'est les \n que tu ajoute avec le code JS ?
Pourquoi utiliser php pour les retours à la ligne ? (Javascript peux le faire aussi ;) ).

@+

Re: Les retours a la ligne

Posté : 18 avr. 2012, 07:05
par rimie
oui, comment integrer du JS au code HTML, j'ai essaye:
onclick="insertTag('[ul]<script>\n</script>[li]'

Re: Les retours a la ligne

Posté : 18 avr. 2012, 09:08
par Mazarini
Il doit être possible de jouer sur les marges des tag html avec du css ou des attributs du type : style="margin = 0"
margin peut être remplacer par margin-top et/ou margin-bottom.

Re: Les retours a la ligne

Posté : 18 avr. 2012, 11:54
par rimie
je pense que la solution du JS est mieux, Non!

Re: Les retours a la ligne

Posté : 19 avr. 2012, 05:02
par rimie
comment peut on faire un retour a la ligne avec du JS au sein du code HTML?

Re: Les retours a la ligne

Posté : 19 avr. 2012, 08:33
par moogli
"\r\n" dans une chaîne de caractère si c'est dans un textarea. sinon un bon vieux br :)


@+

Re: Les retours a la ligne

Posté : 19 avr. 2012, 08:55
par rimie
insertTag('[ul]<script>\r\n</script>[li]'
ca me donne:

[ul]<script>
</script>[li]Text[/li]<script>
</script>[/ul]

Re: Les retours a la ligne

Posté : 19 avr. 2012, 09:30
par Mazarini
Ce que j'ai compris, c'est que dans le rendu d'une liste <ul> il apparaît un trop grand espace assimilable à un saut de ligne. Il y a longtemps, j'avais résolu ce problème en "oubliant" la balise <ul>

C'est pour ca que je proposait l'utilisation de <ul style="margin: 0"> ou <ul style="margin-top: 0; margin-bottom: 0">

Re: Les retours a la ligne

Posté : 19 avr. 2012, 12:15
par rimie
Ce que j'ai compris, c'est que dans le rendu d'une liste <ul> il apparaît un trop grand espace assimilable à un saut de ligne. Il y a longtemps, j'avais résolu ce problème en "oubliant" la balise <ul>

C'est pour ca que je proposait l'utilisation de <ul style="margin: 0"> ou <ul style="margin-top: 0; margin-bottom: 0">
je parle de [ul] et retour a la ligne [li], comment le faire en JS sans que ca soit visible au code textarea

Re: Les retours a la ligne

Posté : 19 avr. 2012, 13:45
par moogli
heu je crois que l'on pige pas ce que tu veux faudrait être plus clair.

parce qu'un retour a la ligne qui ne ce vois pas ça n'existe pas hein.

tu veux mettre en page le bbcode ? (pas le rendu) ?

si c'est ça tu le fait dans le code JS c'est suffisant.

@+

Re: Les retours a la ligne

Posté : 19 avr. 2012, 16:05
par rimie
je veux le faire au textarea:
<textarea ....>

ici je mets mes trucs en gras, italic, bla bla, apres je mets ma liste

[ul] // retour a la ligne invisible
[li]text[/li] // retour a la ligne invisible
[/ul] // retour a la ligne invisible

du text encore en gras, italic,..
</textarea>

Re: Les retours a la ligne

Posté : 19 avr. 2012, 16:16
par Mazarini
Je pense que s'il y a un problème, c'est dans la fonction javascript "insertTag" que l'on ne voit pas.
L'appel à cette fonction me semble bon.

Je pense avoir compris ton problème : lorsque tu cliques sur le bouton d'ajout de liste, ca ajoute des saut de ligne en trop dans la textarea.

Re: Les retours a la ligne

Posté : 19 avr. 2012, 16:25
par moogli
[javascript]
onclick="insertTag('[ul]\n[li]\n','Text1[/li]\n[/ul]\n','textarea');"
[/javascript]

Ou avec des " je sais plus si en javascript y a les même problème qu'avec php ^^

@+

Re: Les retours a la ligne

Posté : 20 avr. 2012, 05:05
par rimie
je l'ai laisse comme c'est deja fait en PHP, j'ai filtre les br, n et r par des remplacements:
foreach($this->tags as $k=>$v)
	   {
	  		$this->text = preg_replace('/'.$k.'/', $v , $this->text);  		
			
			$this->text = preg_replace('/\n/', '', $this->text);
			$this->text = preg_replace('/\r/', '', $this->text);
			$this->text = preg_replace('/<ul><br \/>/', '<ul>', $this->text);
			$this->text = preg_replace('/<br \/><\/ul>/', '</ul>', $this->text);
			$this->text = preg_replace('/<\/li><br \/>/', '</li>', $this->text);
	   }
je pense que c'est la meilleur chose a faire, merci a vous :)