Partage
  • Partager sur Facebook
  • Partager sur Twitter

CKEditor + AJAX

Sujet résolu
    8 juillet 2010 à 15:53:00

    Bonjour à tous,

    Je me tourne vers vous après des heures de recherches infructueuses de parts et d'autres sur le net :(
    C'est la première fois que je post sur ce forum même si je l'ai déjà bien geeké depuis mes débuts en développement web :D


    Mon problème est assez "simple" en fait : je suis en train de terminer la partie d'administration d'un site et je viens d'attaquer sérieusement le module de news (fait à la main).
    Afin de pouvoir rédiger de jolies news, j'ai opté pour l'éditeur WYSIWYG CKEditor qui est efficace tout en étant simple d'utilisation. J'arrive sans problème à le charger et à configurer les outils que je désire...

    Le problème provient du fait que la page où se trouve mon textarea modifié par CKEditor va être chargée en AJAX dans ma page principale, du coup je me retrouve avec des textareas basiques :(

    De façon classique, j'utilise ce code (qui fonctionne) au chargement de la page pour modifier mes textareas :

    CKEDITOR.replace( 'editor1',
                    {
                        toolbar : 'MyToolbar',
                        uiColor : '#F96'
                    });
    


    Est-ce que quelqu'un qui aurait déjà été confronté au problème aurait une idée ?
    Je désespère un peu puisque je n'ai pas vraiment envie de faire une partie en AJAX et une autre non au sein de la même application :D


    P.S. : J'ai aussi le même problème pour charger Shadowbox de la même manière mais chaque chose en son temps :p
    • Partager sur Facebook
    • Partager sur Twitter
      8 juillet 2010 à 16:23:47

      Tu peux montrer ton bout de code avec AJAX? Normalement en mettant le code pour init CKEDITOR dans le callback de l'AJAX, ca devrait fonctionner.

      Pour shadowbox, idem dans le callback tu fais :

      Shadowbox.init({ skipSetup: true }); Shadowbox.setup();
      
      • Partager sur Facebook
      • Partager sur Twitter
        8 juillet 2010 à 16:34:45

        Je ne suis pas sûr de saisir ce dont tu parles ne faisant allusion au "callback" :euh:

        J'ai oublié de le préciser mais j'utilise le framework Prototype pour entre autre mes requêtes AJAX.
        Du coup, mes requêtes AJAX ressemblent à ça :

        function afficherNews(news)
        {
        	var params="news=" + news;
        	new Ajax.Updater('corp_ctn','script/afficheNews.php', {method:'post', parameters:params});
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          9 juillet 2010 à 14:35:50

          Pour la definition d'un callback : http://fr.wikipedia.org/wiki/Fonction_de_rappel

          En gros, c'est une fonction qui s'exécute après la requête ajax. Pour Ajax.Updater ca s'utilise avec onComplete :

          new Ajax.Updater('corp_ctn','script/afficheNews.php', {method:'post', parameters:params, onComplete: function () {
          CKEDITOR.replace( 'editor1',
                          {
                              toolbar : 'MyToolbar',
                              uiColor : '#F96'
                          });
           
          Shadowbox.init({ skipSetup: true }); Shadowbox.setup();
          }});
          


          A une parenthese ou crochet pret ca devrait etre un truc du genre ;) (PS : facile a trouver en tapant Ajax.Updater callback sur google ;) )
          • Partager sur Facebook
          • Partager sur Twitter
            9 juillet 2010 à 14:41:20

            Merci pour la définition, c'était bien à peu prés ce à quoi je pensais.

            Hmmmm j'avais déjà essayé quelque chose dans ce genre avec "onSuccess" mais je vais essayer tout de suite. D'ailleurs j'irai voir quelle est la réelle différence entre ces deux là...
            Je test et je te tiens au courant :D

            Merci encore, avec la course aux entreprises pour faire de l'alternance je suis un peu à bout de souffle :o


            EDIT : Mon textarea disparaît (au moins ça prouve que quelque chose se fait ^^), je vais gratter un peu :p
            D'ailleurs la fonction ressemble à ça, effectivement il manquait un tout petit truc, si ça peut aider quelqu'un :

            function afficherNews(news)
            {
            	var params="news=" + news;
            	new Ajax.Updater('corp_ctn','script/afficheNews.php', {
            					method:'post', parameters:params,
            					onComplete:function(rep){	
            						CKEDITOR.replace( 'editor1',
            									{
            										toolbar : 'MyToolbar',
            										uiColor : '#F96'
            									}
            								);
            								 }
            							       }	
            		         );
            }
            


            P.S. : J'abuse volontairement des tabulations pour aérer mon code :p
            • Partager sur Facebook
            • Partager sur Twitter
              9 juillet 2010 à 16:52:06

              Poste la source html generee, on pourra y voir plus clair ;)
              • Partager sur Facebook
              • Partager sur Twitter
                9 juillet 2010 à 17:20:53

                Voici le code HTML généré après chargement en AJAX (je n'ai pris que le bloc qui nous intéressait) :

                <div id="corp_ctn" class="corp_ctn"><h2>Affichage / Modification d'une news</h2><br>
                <center>
                    <div><label>Titre de la news :&nbsp;&nbsp;</label><input type="text" value="news 2"></div><br>
                    <div><label>Date de création : </label><input type="text" disabled="" value="2010-07-08"></div><br>
                    <div><textarea name="editor1" style="visibility: hidden;">rtheherqhqerheqhqeh</textarea></div><br><br>
                </center>
                <div style="float: right;">
                	<input type="button" value="Valider">&nbsp;<input type="button" onclick="ouvrirPage('script/listeNews.php');" value="Annuler"><br>
                </div><br></div>
                


                Pour se situer dans le contexte, ce bloc apparaît après que l'utilisateur ait sélectionné une news dans une liste. La partie mise à jour se situe dans la div "corp_ctn".
                La textarea passe donc en "visibility: hidden" lors du chargement mais même en l'affichant via FireBug, il ne s'agit pas du textarea que je devrais avoir via CKEditor :o
                • Partager sur Facebook
                • Partager sur Twitter
                  9 juillet 2010 à 18:05:04

                  Salut, regarde le code propose ici : http://cksource.com/forums/viewtopic.php?p=45380#p45380

                  Le deuxieme est cense marcher (de ce que j'ai compris ^^)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 juillet 2010 à 18:52:25

                    Excellent !!

                    Je viens de tester ce bout code et ça marche nickel. Même si pour que ça fonctionne de mon côté, j'ai du utiliser la ligne en commentaire et non celle du dessous.
                    Les deux lignes sont équivalentes apparemment de toutes façons.

                    Merci beaucoup pour avoir pris de ton temps (et de ta patience ^^) pour résoudre ce problème :)
                    En espérant que ça puisse aussi aider d'autres personnes.

                    A bientôt :p
                    • Partager sur Facebook
                    • Partager sur Twitter

                    CKEditor + AJAX

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown