11 mar 2008

CakePHP: aggiunta di editor WYSIWYG di Ext JS (parte 2)



Eravamo rimasti ai problemi di interazione tra il form di Ext JS e CakePHP. Ecco la soluzione:

  1. similmente a quanto fatto per la funzione add creiamo nel file posts_controller.php le due funzioni edit ed edit2:

              function edit($id = null) {
              // carico i dati del post
              $this->data = $this->Post->read();
              // uso la funzione set per passare i dati alla view
              $this->set('data', $this->data);
              }function edit2($id = null) {
              Configure::write('debug', '0'); //turn debugging off; debugging breaks ajax
              $this->layout = 'Ajax'; //set the layout to Ajax so the ajax doesn't break
     
              if (empty($this->data)) {
              $this->Post->id = $id;
              $this->data = $this->Post->read();
              $this->set('success', '{success:true}'); //this is a json statement. EXT forms need this to know if things worked
     
              }
              else
              {
              if ($this->Post->save($this->data['Post']))
              {
              $this->set('success', '{success:true}'); //this is a json statement. EXT forms need this to know if things worked
     
              }
              else {
              $this->set('success', '{success:false}'); //EXT forms need this to know if something went wrong
     
              }
              }
              }



    Da notare l’uso nella funzione edit di read per caricare i dati del post in memoria e di set per passare questi dati alla view.

  2. nella view edit.thtml andremo a scrivere il seguente codice:

     
              <script type="text/javascript"><!--mce:0--></script>
    <div id="user-form">
              link('myFormEDIT'); ?&gt;</div>



    Quanto scritto non fa altro che fare l’escape del messaggio contenuto nel post (per evitare situazioni spiacevoli che causino errori di sintassi), salvarlo nella variabile myTextArea ed assegnare quest’ultima alla variabile body definita più avanti in javascript; tale variabile, insieme a quelle titolo ed id, verrà usata nel form di Ext JS. Infine carichiamo il file javascript myFormEDIT.js che si occuperà della renderizzazione del form in Ext JS.

  3. il file myFormEdit.js differisce dal form usato per la funzione add solamente per due righe, collocate rispettivamente nell’item textfield e nell’item htmleditor (ovvero il campo di testo per il titolo e la textarea per il contenuto del post): con la riga value: titolo assegniamo al textfield il contenuto della variabile titolo definita al punto 2., similmente con la riga value: body assegniamo all’htmleditor il contenuto della variabile body.


Per chiarire quanto spiegato finora descriviamo brevemente il flusso dell’applicazione per la funzione edit:

  • cliccando su Edit viene caricata la view edit.thtml che renderizza il form tramite il file myFormEDIT.js

  • a questo punto facciamo le nostre modifiche al post e lo salviamo. Quando clicchiamo su Save viene chiamata la view edit2.thtml che restituisce (grazie al fatto di usare il layout ajax.thtml)
    {success:true}

  • il file myFormEDIT.js pertanto mostra un messaggio di alert comunicando l’avvenuto salvataggio (“It worked!”) e reindirizza l’utente alla lista dei posts, ricaricando la pagina.


Al momento sto lavorando affinché i post editati non vengano salvati in un nuovo post e sto cercando di capire perché l’applicazione si comporti, nonostante il codice sia lo stesso, in modo differente se caricata in locale o in remoto.

UPDATE: problema risolto, vedi qui.

Tags: , , , ,

Subscribe to Comments

2 Responses to “CakePHP: aggiunta di editor WYSIWYG di Ext JS (parte 2)”

  1. […] Qualche tempo fa scrivevo che stavo cercando di capire come mai lo stesso codice si comportava in maniera diversa se caricato in locale (sul mio computer) o in remoto (sullo spazio web di netsons). […]

     
  2. […] Come si può notare il layout ajax non fa altro che stampare esattamente i dati generati dalla view, risulta pertanto utile nel caso analizzato in precedenza. […]

     

Leave a Reply

Message:

  • Ricerca

    or
  • Language

  • Categorie

  • Delicious

  • Statistiche


    Warning: Illegal string offset 'timestamp' in /home/mhd-01/www.micheledallatorre.it/htdocs/blog/wp-content/plugins/firestats/firestats-wordpress.php on line 1081

    Warning: Illegal string offset 'timestamp' in /home/mhd-01/www.micheledallatorre.it/htdocs/blog/wp-content/plugins/firestats/firestats-wordpress.php on line 1081

    Warning: Illegal string offset 'timestamp' in /home/mhd-01/www.micheledallatorre.it/htdocs/blog/wp-content/plugins/firestats/firestats-wordpress.php on line 1081

    Warning: Illegal string offset 'timestamp' in /home/mhd-01/www.micheledallatorre.it/htdocs/blog/wp-content/plugins/firestats/firestats-wordpress.php on line 1081
    • Pages displayed : 33362
    • Unique visitors : 18465
    • Pages displayed in last 24 hours : 0
    • Unique visitors in last 24 hours : 0