Bonjour,

J'essaye depuis un bon moment de sauvegarder en ajax les données d'un formulaire avec un TinyMCE.
J'ai fait des recherches sur internet et j'ai trouve une solution qui est de mettre :
'before'=>"tinyMCE.triggerSave(); tinyMCE.execCommand( 'mceRemoveControl', true, 'ModelField');"

J'ai trouvé cette solution Cakephp et TinyMCE.

Mais ça fonctionne pas. Tous est sauvegardé sauf le contenu du TinyMCE.

Voici mon formulaire:

<?php 
    echo $this->Form->create('Page', array('id' => 'content'));
    echo '<div class="form-row">';
        echo '<div class="form-item">';
            echo $this->Form->input('PageLanguage.content', array('type' => 'textarea', 'label' => '', 'value' => $c'PageLanguage']'content'], 'id' => 'contenu'));
            //echo $this->Uploader->tinymce('PageLanguage.content', $options = array());
        echo '</div>';
    echo '</div>';                                
    echo '<div class="form-row">';
        echo '<label for="textfield" class="form-label fl-space2">Nom de la page :</label>';
        echo '<div class="form-item">';
            echo $this->Form->input('PageLanguage.title', array('type' => 'text', 'label' => '', 'value' => $c'PageLanguage']'title']));
        echo '</div>';
    echo '</div>';
    echo '<div class="form-row">';
        echo '<label for="textfield" class="form-label fl-space2">Statut</label>';
        $statut = array('0' => 'Hors ligne', '1' => 'En ligne');
        echo '<div class="form-item">';
            echo $this->Form->input('Page.statut',array('label' => '', 'options'=>$statut,'Selected'=>$c'PageLanguage']'statut']));
        echo '</div>';
    echo '</div>';
    echo '<div class="form-row">';
            echo '<label for="textfield" class="form-label fl-space2">Template</label>';
            echo '<div class="form-item">';
                echo $this->Form->input('Page.layout', array('label' => '', 'options'=>$a'templates'],'Selected'=>$c'PageLanguage']'Page']'layout']));
            echo '</div>';
    echo '</div>';
    echo $this->Form->input('PageLanguage.language_id', array('type' => 'hidden', 'value' => $c'Language']'id']));
    echo $this->Form->input('Submit.Ok', array('type' => 'hidden', 'value' => 'ok'));
    echo $this->Form->input('PageLanguage.id', array('type' => 'hidden', 'value' => $c'PageLanguage']'id']));
    echo $this->Form->input('Page.id', array('type' => 'hidden', 'value' => $c'PageLanguage']'page_id']));
    echo $this->Js->submit('Enregistrer', array('update' => '.content','url' => array('action' => 'edit', 'admin' => true),'id' => 'submit', 'class' => 'button big black right', 'before'=> "tinyMCE.triggerSave();tinyMCE.execCommand('mceRemoveControl', true, 'contenu');"));
    echo $this->Form->end(); echo $this->Js->writeBuffer();
?>

Et mon controller :

function admin_edit($id = null){
        $a'contenu'] = $this->Language->find('all', array(
            'contain' => array(
                'PageLanguage' => array(
                    'conditions' => array('PageLanguage.page_id' => $id),
                    'Page'
                )
            )
        ));
        if(empty($this->request->data'Submit']'Ok'])){
            $this->request->data'Submit']'Ok'] = '';
        }
        if($this->request->is('ajax') && $this->request->data'Submit']'Ok'] == 'ok'){
            debug($this->request->data);
            //die();
            $this->Page->save($this->request->data'Page']);
            $id = $this->Page->id;
            $this->request->data'PageLanguage']'page_id'] = $id;
            $this->PageLanguage->save($this->request->data'PageLanguage']);
            $this->Session->setFlash('La Page a bien été enregistré', 'notif_admin', array('class' => 'success'));
            $this->redirect(array('action' => 'edit', 'admin' => true, $id)); 
        }
        App::uses('Folder', 'Utility');
        App::uses('File', 'Utility');
        $path = ROOT . DS . 'app' . DS . 'View' . DS . 'Layouts' . DS . 'templates';
        $dirFol = new Folder($path);
        $a'templates'] = array();
        foreach($dirFol->find('.*\.ctp', true) AS $t):
            $t = basename($t, ".ctp");
            $a'templates']$t] = $t;
        endforeach;
        $this->set('a', $a);
    }

Avez vous une idée pour faire fonctionner l'ajax et TinyMCE?

Bonne journée.

3 réponses


Freega
Auteur

Je me permet de relance le post car je n'ai toujours pas trouvé la solution.

Merci d'avance.

Bonsoir,
pour récupérer le contenu d'un textarea (name = content par exemple) sous tinymce c'est :
    var ed = tinyMCE.get('content').getContent();
La documentation est ici : http://www.tinymce.com/tryit/ajax\_load\_save.php

Freega
Auteur

Bonjour,

J'ai bien vu cette solution mais il faut donc je n'utilise plus le submit du formulaire mais que je fasse l'enregistrement avec une fonction jquery.

Ce que j'aimerai c'est de ne pas changer mon système d'enregistrement et réussir à faire rentre dans mon array le contenu du tiny.
Après je suis peut être passé à côté de quelque chose permettant de faire fusionner le contenu du tiny avec la fonction getContent().

Merci pour ton aide.