Bonjour

Je suis actuellement en train de mettre en oeuvre un système de création de page à partir de TinyMCE. Ce système a été modifié par le site scriptol.fr et fonctionne théoriquement bien.

Le problème est le suivant:

Lorsqu'on travaille avec le richtextbox, et qu'on veut mettre en page via de l'html (en cliquant sur le bouton html), la page visualisée dans TinyMCE a bien la mise en page demandée, mais les pages créées n'en tiennent plus compte ou à moitié !

Testez par vous-même:
http://warhammer-jdr.kalikoba.com/te...hes/editor.php

1) Cliquez sur éditer et entrez "essai123.php3"

Ensuite entrez ce code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<ul>
<li>essai 1</li>
<li>essai 2</li>
</ul>
<p>&nbsp;</p>
<p><img src="http://warhammer-jdr.kalikoba.com/images/bannierelogo.jpg" alt="" width="135" height="135" /></p>
Ou de l'html quelconque.

La prévisualisation fonctionne bien. Cliquez sur Sauver, puis allez sur la page générée: http://warhammer-jdr.kalikoba.com/te.../essai123.php3

Et là, vous verrez le problème: la liste à puce est prise en compte et mise en page, mais aucune trace de l'image

D'où le problème: le code que mes membres devront entrer dans le richtextbox est sensé être du html pour avoir une belle mise en page. Là, tout capote !

Note importante ! Tout fonctionne correctement en local. Mais dès que je passe en ligne, ca bug comme expliqué ci dessus

Voyez, pour les mêmes informations entrées en html, les mêmes noms de pages et les mêmes fichiers php:
en local:
http://img2.imageshack.us/img2/2021/locala.png
en ligne:
http://img580.imageshack.us/img580/4866/online.png

On peut remarquer aussi qu'il y a beaucoup de différences entre le contenu inséré dans l'éditeur et ce qui ressort du code source de la page:

HTML entré:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
<p><img style="display: block; margin-left: auto; margin-right: auto;" src="../images/imgfiches/barre1.jpg" alt="" width="600" height="100" /></p><br>
<p style="text-align: center;"><strong><span style="font-family: verdana,geneva; font-size: medium; color: #6a94bd;"><em><span style="text-decoration: underline;">Informations générales sur le personnage :</span></em></span></strong></p>
<h4>Nom et prénom:</h4> Medenor
<h4>Âge du personnage :</h4> dddd ans
Résultat du code source:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<p><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"../images/imgfiches/barre1.jpg\" alt=\"\" width=\"600\" height=\"100\" /></p>
<p>&nbsp;</p>
<p style=\"text-align: center;\"><strong><span style=\"font-family: verdana,geneva; font-size: medium; color: #6a94bd;\"><em><span style=\"text-decoration: underline;\">Informations g&eacute;n&eacute;rales sur le personnage :</span></em></span></strong></p>
 
<h4>Nom et pr&eacute;nom:</h4>
<p>Medenor</p>
<h4>&Acirc;ge du personnage :</h4>
<p>dddd ans</p>

On peut voir par exemple que des antislash sont ajoutées systématiquement avant chaque " (en local comme en ligne), alors que normalement en html pas besoin de ça.

Voici le script original:
http://www.scriptol.fr/cms/tinymce.php

Voici mes codes:

  • Editor.php, qui contient le Richtextbox


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Warhammer JDR: Jeu de r&ocirc;le par forum</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="style.css" rel="stylesheet" type="text/css" />
<!-- TinyMCE -->
<script type="text/javascript" src="tiny_mce/tiny_mce.js"></script>
<script type="text/javascript" src="anaa.js"></script>
<script type="text/javascript">
	tinyMCE.init({
		// General options
		mode : "textareas",
		theme : "advanced",
		language : 'fr',		
		plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups",
 
		// Theme options
		theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
		theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
		theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
		theme_advanced_statusbar_location : "bottom",
		theme_advanced_resizing : true,
 
		// Example word content CSS (should be your site CSS) this one removes paragraph margins
		content_css : "editor.css",
 
		// Drop lists for link/image/media/template dialogs
		template_external_list_url : "lists/template_list.js",
		external_link_list_url : "lists/link_list.js",
		external_image_list_url : "lists/image_list.js",
		media_external_list_url : "lists/media_list.js",
 
		// Replace values for the template plugin
		template_replace_values : {
			username : "Some User",
			staffid : "991234"
		}
	});
 
 
function view()
{
    var x = document.getElementById("elm1");
	alert(tinyMCE.activeEditor.getContent());
}
 
 
function storend(answer)
{
	alert(answer);
}	
 
function store()
{
	var content = tinyMCE.activeEditor.getContent();
	var title = document.getElementById("title").value;
	var template = document.getElementById("template").value;
	var data = "content=" + escape(content) + "&title=" + title + "&template=" + template;
 
    AAWrite("store.php", data, storend); 
}
 
// extract the text of the page to edit, put it into the editor
 
function insert(content)
{
	alert(content);
}
 
// read the page and send it to a script to extract data
 
function retrieveContent(content)
{
	if(content == "")
	{
		alert("Fichier introuvable");
		return;
	} 
    tinyMCE.activeEditor.setContent(unescape(content));
}
 
 
function retrieveTitle(content)
{
	if(content == "")
	{
		alert("Fichier introuvable");
		return;
	} 
	var title = document.getElementById("title");
	title.value = content;
}
 
 
function editpage()
{
	var filename = prompt("Page à éditer:", "");
	var data = "page=" + filename + "&command=post";
	AAWrite("retrieve.php", data, retrieveContent);
 
	var data = "page=" + filename + "&command=title";		
	AAWrite("retrieve.php", data, retrieveTitle);	
}
 
 
</script>
 
</head>
<body>
<div id="container">
	<div id="header">
		<div id="nav"></div>
	</div>
  <div id="contentenvoi">
    <div id="text1">
	    <table width="644" border="0">
	      <tr>
	        <td><div class="heading">
	      <p>Warhammer JDR</p>
	              <blockquote>
	                <p>Gestion des fiches personnages</p>
              </blockquote>
 
            </div>
	          <p><em><br />
            Ce module vous permet de cr&eacute;er et g&eacute;rer efficacement les fiches des personnages du forum. En copiant collant ici le code qu'auront g&eacute;n&eacute;r&eacute;s les PJ via le g&eacute;n&eacute;rateur, vous obtiendrez la mise en page directement souhait&eacute;e.</em><br /><br />
	          <strong>Quelques notes importantes !</strong><br /><br />
	          - Le titre donn&eacute; &agrave; la fiche sera le nom du fichier g&eacute;n&eacute;r&eacute;, utilisez donc comme titre &quot;Fiche nom&quot; <strong>uniquement</strong> ! Chaque espace donnera un tiret dans le nom de fichier<br />
              - <br />
	          - Une fois la page cr&eacute;&eacute;e, vous pourrez par la suite l'&eacute;diter en appuyant simplement sur le bouton &quot;Editer&quot;, puis d'entrer le nom de fichier correspondant: &quot;fiche-nom.php3&quot; (le num&eacute;ro est important) si on reprend l'exemple du point pr&eacute;c&eacute;dent. La liste des fiches pourra aider au besoin.</p></td>
<td align="right"><div id="quicklinks">
				<ul>
					<li><a href="http://warhammer-jdr.kalikoba.com/index.php"><strong>Accueil</strong></a></li>
                    <li><a href="http://warhammer-jdr.kalikoba.com/phpBB3/index.php"><strong>Forum de jeu V2</strong></a></li>
					<li><a href="http://warhammer-jdr.kalikoba.com/wiki-v2/doku.php">Biblioth&egrave;que V2 (r&egrave;gles, etc)</a></li>
                    <li><a href="mailto:admin_warhammer-jdr@skynet.be">Contacter l'administrateur</a></li>
                    <li><a href="http://warhammer-jdr.kalikoba.com/phpBB3/viewtopic.php?f=1&t=157">Nouveau ? Vos premiers pas</a></li>
					<li><a href=".">G&eacute;n&eacute;rateur de fiche personnage</a></li>
					<li><a href="http://warhammer-jdr.kalikoba.com/carriere/">Module des carri&egrave;res</a></li>
					<li><a href="http://warhammer-jdr.kalikoba.com/bestiaire/">Le bestiaire</a></li>
                    <li><a href="http://warhammer-jdr.kalikoba.com/phpBB3/viewtopic.php?f=4&t=65">FAQ</a></li>
				</ul>
			</div></td>
          </tr>
      </table>
 
	  </div>
      <?php
 
	echo "<p><b>Editeur de fiches en ligne</b></p>";
 
?>
 
 
<form method="post" action="">
	<p>Titre ("Fiche pseudo du PJ" uniquement !)   
	<input type="text" id="title" name="title" />
    Template 
	  <select id="template" name="template">
	    <option value="index.php">Par défaut</option>
      </select>
	</p>
	<textarea id="elm1" name="elm1" rows="15" cols="80" style="width: 80%"></textarea>
	<br />
	<input type="button" name="save" value="Sauver" onclick="javascript:store()" />
	<input type="button" name="edit" value="Editer" onclick="javascript:editpage()" />
</form>
    </div>    
 
	<div id="pagebottom"></div>
	<div id="footer">
	  <p class="small2">Site optimis&eacute; pour <a href="http://www.mozilla-europe.org/fr/firefox/">Firefox</a> et <a href="http://www.google.com/chrome">Google Chrome</a><br />	&copy; Interdiction de faire une quelconque reproduction | Id&eacute;es et Design appartiennent &agrave; l'auteur de ce forum, et les messages et id&eacute;es de RP aux membres. <br />	&copy; L'univers, le contexte, les noms et autres appartiennent &agrave; Games Workshop&reg;</p>
	</div>
</div>
</form>
</body>
</html>
  • Store.php, qui convertir les données du richtextbox en page et les génères


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
session_start();
if(!array_key_exists("user", $_SESSION))
{
	die("Accès direct interdit");
}
 
include_once("titleconvert.php");
 
$a = $_POST;
$content = urldecode($a["content"]);
$title= $a["title"];
$template = "templates/".$a["template"];
 
$body = file_get_contents($template); 
 
$filename = convertTitle($title).".php3";
 
$pattern='{<div\s+id="content"\s*>((?:(?:(?!<div[^>]*>|</div>).)++|<div[^>]*>(?1)</div>)*)</div>}si';
 
preg_match($pattern, $content, $matches);
$parts = preg_split($pattern, $body);
 
// replace title
 
$tpat = "/[\$title\s=]([\s\"].*[\"])[;]/i";
$head = preg_replace($tpat, '="'.$title.'";', $parts[0]);
 
// replace content
 
$body = $head.'<div id="content">'.$content.'</div>'.$parts[1];
 
$n = file_put_contents($filename, $body, FILE_TEXT );
 
echo "La fiche a été sauvée sous le nom de $filename";
 
 
?>
Les autres fichiers fournis par Scriptol.fr n'ont pas été modifiés.

Merci d'avance de votre aide, car je désespère ^^ Je pensais avoir passé tout les problèmes, et planter si près du but c'est

NB: j'ai remarqué la présence de plusieurs / quand on switch de fiches avec la liste déroulante, sait-on jamais, ca pourrait être une cause ?