Joomla.it Forum

Componenti per Joomla! => Editor => : diggio 15 Oct 2011, 12:24:17

: Editor jce multipli nella stessa pagina
: diggio 15 Oct 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
:
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
:
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
:
$rand = rand(); genera un numero casuale.
La seconda
:
$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.