2010-08-29 7 views
0

J'utilise CKEditor pour créer la partie de mon CMS pour que l'utilisateur saisisse du contenu. Mon CMS est une barre/menu en haut avec les sections du site pour que l'utilisateur puisse créer, mettre à jour ou supprimer une entrée.Pourquoi mes formulaires CMS dynamiques ne se chargent-ils pas à chaque fois?

Lorsque l'utilisateur sélectionne une option, j'envoie la requête pour les éléments de formulaire à php en utilisant jquery AJAX $ .post. La fonction renvoie le code et j'utilise $ ('# loadCMS'). Html (data) pour créer le formulaire sans recharger la page. Ce travail excellent et le débogage montre toujours le code correct retourné. Toutefois, CKEditor ne se charge que la première fois qu'un élément est sélectionné. Il peut charger à nouveau mais c'est rare.

CKEditor est le javascript qui se trouve dans la tête et remplace spécifiée textareas avec l'éditeur

<head> 
... 
<script type="text/javascript" src="/ckeditor/ckeditor.js"></script> 
... 
</head 

ce qui est chargé dynamiquement appeler l'éditeur

<textarea name="editor1"></textarea> 
    <script type="text/javascript"> 
     CKEDITOR.replace("editor1", 
     { 
      toolbar : 
      [ 
      ['Source'], 
      ['Cut','Copy','Paste','PasteText','PasteFromWord','-', 'SpellChecker'], 
     ['Undo','Redo','-','RemoveFormat'], 
     ['Bold','Italic','Underline'], 
     ['Subscript','Superscript'], 
     ['NumberedList','BulletedList'], 
     ['Link','Unlink'], 
     ['Image','Flash','HorizontalRule','SpecialChar','Format'], 
     ['Maximize', 'ShowBlocks','-','About'] 
      ], 
      width : '1000', 
      height : '300', 
      filebrowserBrowseUrl : '/ckfinder/ckfinder.html', 
      filebrowserImageBrowseUrl : '/ckfinder/ckfinder.html?Type=Images', 
      filebrowserFlashBrowseUrl : '/ckfinder/ckfinder.html?Type=Flash' 
     }); 
    </script> 

jquery

$('#portfolioCreate').click(function() 
    { 
     var detailsList = new Array('title','medium','original'); 
     $.post('cms.php',{detailsList: detailsList,images:"imageOn",subimgNum:0,content1:"Comments"}, 
     function(data) 
     { 
      $('#loadCMS').html(data); 
      $('#debug').val(data); 
     }); 
    }); 

Le les formulaires sont créés dynamiquement à chaque fois. Cependant, les zones de texte remplacées par CKEditor ne les remplacent pas toujours, elles sont simplement vides, pas même la zone textarea. La première fois qu'une sélection est faite cela fonctionne. Si l'utilisateur choisit de créer une nouvelle entrée de blog, la zone de texte est remplacée. Si elle choisit de mettre à jour, la zone de texte ne sera jamais remplacée, même si elle revient créer une nouvelle entrée de blog.

----------------- SOLUTION -------------------------

php dynamique

$key = md5(time().rand()) 
<textarea name="'.$key.'"></textarea> 
<script type="text/javascript"> 
CKEDITOR.replace("'.$key'", 
{ 
    ..... 
}); 
<input type="hidden" value="'.$key.'" name="content1Key" /> 
</script> 

php pour tirer de la forme

$content1Key = $_POST['content1Key']; 
$content1 = $_Post[$content1Key]; 
+0

Je sais que c'est un concept étrange et difficile à expliquer. – dcp3450

Répondre

1

CKEditor est très pointilleux sur la création dynamique des formes en raison de la façon dont ils stockent des références (dans un global array keyed by textarea name je crois). Essayez de donner un nom unique à chaque zone de texte afin d'éviter de renvoyer une référence existante qui a été détruite/écrasée, et après avoir chargé chaque nouveau formulaire, vous devez appeler le CKEDITOR.replace.

+0

ouais, semble que c'était le problème. cependant maintenant chacun travaille une fois. si j'ai 3 éditeurs j'ai 3 noms uniques, une autre option avec un nom unique fonctionne maintenant mais si je reviens cela ne fonctionnera pas car il a été "détruit/écrasé" déjà. hummmm. – dcp3450

+0

Ainsi, CKEditor conserve le nom de la zone de texte pour éviter que les données ne soient écrasées. Lorsque la page est rechargée, les données sont perdues, ce qui permet de modifier à nouveau la zone de texte. Je dois juste trouver comment forcer CKEditor à ne pas le faire ou lui dire de libérer les noms de textarea quand un nouvel élément est sélectionné. – dcp3450

+0

Les noms de formulaire sont-ils uniques entre les actualisations de formulaire? Chaque fois que vous récupérez le formulaire, il doit avoir un nom unique - essayez d'ajouter l'horodatage actuel. –

Questions connexes