11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je me suis inspiré du site du zéro pour réaliser un formulaire en BBCODE. Celui fonctionne parfaitement à l'écriture (Je veux dire par là que le contenu du formulaire est sauvegardé dans la base de données avec le format BBCODE).

En ce qui concerne la lecture, j'ai quelques problèmes. J'arrive à récupérer l'ensemble des news écrites, mais le format BBCODE est ignoré.

Voici mon fichier JavaScript pour la transformation BBCODE/TEXTE :

var ptag=String.fromCharCode(5,6,7);

function  previsualisation() {
	t=document.contenu.value 
	t=code_to_html(t)
	if (document.getElementById) document.getElementById("prev").innerHTML=t
}


function code_to_html(t) {
t=nl2khol(t)

// balise Gras 
t=deblaie(/(\[\/gras\])/g,t)
t=remplace_tag(/\[gras\](.+)\[\/gras\]/g,'<span style="font-weight: bold;">$1</span>',t) 
t=remblaie(t)

// balise Italic
t=deblaie(/(\[\/italic\])/g,t)
t=remplace_tag(/\[italic\](.+)\[\/italic\]/g,'<span style="font-style: italic;">$1</span>',t) 
t=remblaie(t)

// balise Citation
t=deblaie(/(\[\/citation\])/g,t)
t=remplace_tag(/\[citation=([\s\S]*?)\](.+)\[\/citation\]/g,'<strong>Citation $1 :</strong><div style="border: 1px solid #000000; width: 50%; font-family: Verdana, \'Trebuchet MS\', Tahoma, \'Times New Roman\', Times, serif; text-align: left; font-size: 11px;" align="center">$2</div>',t) 
t=remblaie(t)

// balise Image
t=deblaie(/(\[\/image\])/g,t)
t=remplace_tag(/\[image\](.+)\[\/image\]/g,'<img src="$1" />',t)
t=remblaie(t)

// balise URL   
t=deblaie(/(\[\/url\])/g,t)
t=remplace_tag(/\[\url=([\s\S]*?)\](.+)\[\/url\]/g,'<a href="$1" target="_blank">$2</a>',t)
t=remblaie(t)

t=unkhol(t)
t=nl2br(t)
return t
}

// tout le code qui suit c'est pour transformer toutes les balises, comme les preg_replace en PHP 
function deblaie(reg,t) {
	textarea=new String(t);
	return textarea.replace(reg,'$1\n');
}

function remblaie(t) {
	textarea=new String(t);
	return textarea.replace(/\n/g,'');
}

function remplace_tag(reg,rep,t) {
	textarea=new String(t);
	return textarea.replace(reg,rep);
}

function nl2br(t) {
	textarea=new String(t);
	return textarea.replace(/\n/g,'<br/>');
}

function nl2khol(t) {
	textarea=new String(t);
	return textarea.replace(/\n/g,ptag);
}

function unkhol(t) {
	textarea=new String(t);
	return textarea.replace(new RegExp(ptag,'g'),'\n');
} 



Et voici mon code PHP pour afficher ces news :

<?php

// On récupère les 5 dernières news
$retour = mysql_query('SELECT * FROM news ORDER BY idnews DESC LIMIT 0, 5');
while ($donnees = mysql_fetch_array($retour))
{
?>
	<div style="border: 1px dashed #000000; padding: 0.2em; height: 200px; overflow: auto;" align="left" id="prev">
	
		<h3>
			<?php echo $donnees['titrenews']; ?>
			<em>le <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></em>
		</h3>
	
		<?php
			//On enlève les éventuels antislash PUIS on crée les entrées en HTML
			$contenu = nl2br(stripslashes($donnees['contenunews']));
		?>
		
		<span id="contenu" name="contenu"><?php echo "$contenu" ?></span>
   
		<p>		
		<input type="hidden" value="Visualiser" onLoad="previsualisation()" />	
		
		</p>
		</div>
<?php
} // Fin de la boucle des news
?>


Je pense que le problème vient d'une absence de liaison entre le fichier php et la fonction javascript, au niveau de
<span id="contenu" name="contenu"><?php echo "$contenu" ?></span>


Mais je n'arrive pas à saisir le fonctionnement de
t=document.contenu.value


Quelqu'un pourrait-il m'éclairer afin de réaliser cette liaison ?

En vous remerciant,
Guillaume
a écrit :
Je veux dire par là que le contenu du formulaire est sauvegardé dans la base de données avec le format BBCODE

Si j'ai bien compris, je suis pas sur que ce soit une bonne idée.

La logique voudrait, il me semble, que le contenu de la base de données ne soit pas en format BBcode mais en html.
En principe, il me semble que l'on crée une news ou l'édite moins souvent que les visiteurs de ton site ne les consultent.
Si tu convertit, à chaque visiteur, tes news en html, tu pompes du process pour pas grand chose.

Le plus logique me semble t'il serait d'enregistrer en html dans ta base et de retransformer en bbcode pour l'édition.

Sinon, pour ton
t=document.contenu.value
Je suis pas très bon en javascript mais c'est pour récuperer le value de ton input non ?
Pour récuperer de l'html entre les balises c'est plutôt
t=document.contenu.innerHTML
il me semble.
Tout d'abord, désolé pour mon retard et merci pour ta réponse (et oui, les vacances...)

Concernant le pompage de process, c'est pas très grave étant donné qu'une machine récente sera dédié à l'hebergement de ce site et qu'il n'est pas destiné à un très grand nombre de personnes (ce n'est qu'une "vitrine" représentative d'un lycée)

Ensuite, concernant le innerHTML, celà ne change rien, l'enregistrement dans la table s'effectue bien (avec le BBCODE) mais la reconversion en BBCODE lors de l'affichage ne s'effectue pas et j'ai le droit au (gras)mon message(gras) au lieu de mon message
Modifié par Killaman (02 May 2007 - 09:36)
Pour ton problème, fais comme dans dotclear : dans la base de données enregistre la version bbcode et la version html. A l'affichage, tu envoie la version html et à l'édition, tu reprend le bbcode dans le formulaire. La transformation en html (php) se fait à chaque sauvegarde ou prévisualisation.
Modifié par Patidou (02 May 2007 - 11:59)
Ouh là, j'ai bien peur de ne pas avoir tout compris.

Pourrais tu me fournir une explication plus détaillée, s'il te plait ?
Dotclear ne fonctionne pas avec une syntaxe BBCODE mais wiki, mais le principe est le même. Quand tu tapes ton texte en wiki et puis que tu le sauvegardes, dotclear enregistre le texte wiki dans un champ de la base de données plus une version transformée en html (grâce à php) dans un autre champ. La version html ne sert qu'à l'affichage. L'utilisateur travaille seulement sur la version wiki. Bref, on n'utilise pas javascript (du moins dans la version 1.2.x) mais seulement le php pour la transformation wiki/html. C'est ce que voulait dire Amalgame...

Enfin, j'espère que ce que je te dis va t'aider et que je n'ai pas compris de travers...
Modifié par Patidou (02 May 2007 - 13:24)
Euh bah en fait, c'est pas forcément que je veux generer moins de process

C'est juste que normalement, j'enregistre dans ma table un texte avec des balises BBCODE, et que grace à ma fonction javascript, je remplace le BBCODE par des balises HTML lors de la lecture.

Mais là, quand je lis, la transformation ne s'effectue pas.

Si tu lis mon code javascript, il y'a un
t=document.contenu.value
dans les premieres lignes.

Je pense que c'est ce code qui ne fonctionne pas, et que t ne vaut rien... et ça je sais pas pourquoi Smiley bawling
Salut,

moi je fais pas confiance a cette ecriture


t=document.contenu.value



on lit partout que ça marche mais vraiment quand ça veut bien. pk j'ai plus d'echecs avec.

je prefere de loin


t= document.getElementById('uneID').value


mais un span a-t-il une valeur value?
Modifié par CPascal (02 May 2007 - 15:17)
Je suis pas codeur, donc à ce niveau là je ne peux pas t'aider. Mais n'y aurait-il pas un problème de conception au niveau de ton application? Que se passe-t-il si l'utilisateur a le Javascript désactivé? Est-ce que le peu de ressource utilisé sur le serveur pour la transformation bbcode/html vaut tout ce chipotage en javascript?
Si l'utilisateur a le javascript désactivé, celà lui affiche juste les balises BBCODE au lieu de les transformer.

Je vais étendre mes recherches par rapport à ce que m'a dit CPascal, et je vous tiendrai informé de ce qui se passe...

(Mais je comprend pas toujours pas pourquoi cela fonctionne sur le site du zéro et pas sur le mien...)

Merci