Autore Topic: Editor jce multipli nella stessa pagina  (Letto 676 volte)

Offline diggio

  • Nuovo arrivato
  • *
  • Post: 15
  • Sesso: Maschio
    • Mostra profilo
Editor jce multipli nella stessa pagina
« il: 15 Ott 2011, 12:24:17 »
Sviluppando un componente mi sono imbattuto nel problema di dover avere diversi editor wysiwyg nella stessa pagina e mi sono accorto che quando si istanzia un editor gli altri si bloccano.

Nello specifico sto usando JCE
Dovo varie ricerche più o meno inutili ho deciso di mettere mano al codice del plugin e ho trovato una soluzione.

Soluzione:
File -> plugins/editors/jce/jce.php
Funzione -> onDisplay

Riporto qui il codice originale della funzione
Codice: [Seleziona]
function onDisplay($name, $content, $width, $height, $col, $row, $buttons = true, $id = null, $asset = null, $author = null)
    {
        $model = JModel::getInstance('editor', 'WFModel');
       
        if (empty($id)) {
            $id = $name;
        }
       
        // Only add "px" to width and height if they are not given as a percentage
        if (is_numeric($width)) {
            $width .= 'px';
        }
        if (is_numeric($height)) {
            $height .= 'px';
        }
       
        if (empty($id)) {
            $id = $name;
        }
       
        $buttons = $this->_displayButtons($id, $buttons, $asset, $author);
       
        $editor  = '<label for="' . $id . '" style="display:none;" aria-visible="false">' . $id . '_textarea</label><textarea id="' . $id . '" name="' . $name . '" cols="' . $col . '" rows="' . $row . '" style="width:' . $width . ';height:' . $height . ';" class="wfEditor source" wrap="off">' . $content . '</textarea>';
        $editor .= $model->getToken($id);
        $editor .= $buttons;

        return $editor;
    }

e qui il codice modificato
Codice: [Seleziona]
function onDisplay($name, $content, $width, $height, $col, $row, $buttons = true, $id = null, $asset = null, $author = null)
    {
        $model = JModel::getInstance('editor', 'WFModel');
        $rand = rand();
        if (empty($id)) {
            $id = $name;
        }
       
        // Only add "px" to width and height if they are not given as a percentage
        if (is_numeric($width)) {
            $width .= 'px';
        }
        if (is_numeric($height)) {
            $height .= 'px';
        }
       
        if (empty($id)) {
            $id = $name;
        }
        $id=$id."_".$rand;
        $buttons = $this->_displayButtons($id, $buttons, $asset, $author);
       
        $editor  = '<label for="' . $id . '" style="display:none;" aria-visible="false">' . $id . '_textarea</label><textarea id="' . $id . '" name="' . $name . '" cols="' . $col . '" rows="' . $row . '" style="width:' . $width . ';height:' . $height . ';" class="wfEditor source" wrap="off">' . $content . '</textarea>';
        $editor .= $model->getToken($id);
        $editor .= $buttons;

        return $editor;
    }

Come si vede dal codice sono state aggiunte due righe nuove.
La prima all'inizio della funzione
Codice: [Seleziona]
$rand = rand(); genera un numero casuale.
La seconda
Codice: [Seleziona]
$id=$id."_".$rand; aggiunge questo numero casuale all'id dell'editor.

In questo modo se abbiamo più editor nella stessa pagina ognuno di essi prende un id diverso permettendoci di averne quanti ne vogliamo.

Note:Questa modifica non comporta differenze se si usa un solo editor ma può rallentare il caricamento della pagina quando se ne usano diversi in quanto l'editor viene reistanziato per ogni relativa textarea.

Sperando di essere di aiuto a qualcuno vi auguro a tutti buona giornata.


 

Host

Torna su