Home » Generale, Howto, Javascript, Linux, PHP, Programmazione

TinyMCE: integrare perfettamente Ajax File Manager

2 maggio 2008 7.217 views 62 Comments

TinyMCE, come molti sapranno, è un web editor WYSIWYG scritto in javascript che permette a chiunque di creare/editare pagine web senza conoscere l’HTML (una sorta di Word per il web).

Il tutto lato-client (in javascript appunto) senza programmare particolari script php che trasformano le stringhe di testo puro nelle entità HTML equivalenti (per esempio i caratteri accentati come le lettere “ò”,”à”,”è”…).

L’installazione e la personalizzazione è estremamente semplice, corredato da un wiki molto completo e pagine di esempi con tutte le possibile personalizzazioni dello script.

Si sa, però, che javscript è lato-client e non può essere utilizzato per effettuare upload su server se non tramite ajax o popup che hanno dietro pagine php programmate per effettuare tali uploads. Ciò rappresenta un problema se abbiamo la necessità di effettuare l’upload e il ridimensionamento di immagini ed inserirle all’interno dell’editor tinymce.

In giro ci sono alcuni plugin per tinymce che fanno questa cosa ma, purtroppo, molti sono a pagamento.

Risolviamo il problema utilizzando uno script open source di nome Ajax File Manager.

Tale script è a se stante e, di base, non vengono fornite spiegazione per integrarlo a TinyMCE, ma viene fornito solamente un pacchetto con TinyMCE e Ajax File Manager incluso.

Il problema del pacchetto è che viene fornito con TinyMCE v. 2.1.2 e Ajax File Manager v. 0.9. Domanda: come facciamo ad avere l’ultima versione di TinyMCE (3.08) e Ajax File Manager (1.0 RC 1)?

Ecco qui come integrare AFM 1.0 Rc1 nella versione 3.08 di TinyMCE.

Scarichiamo l’ultima versione di TinyMCE dalla pagina http://tinymce.moxiecode.com/download.php, scompattiamolo nella root-dir della nostra applicazione (per es. public_html/). Avremo così la cartella public_html/tiny_mce/.

Scarichiamo l’ultima versione di Ajax File manager dalla pagina http://www.phpletter.com/DOWNLOAD/ e scompattiamo il file nella cartella public_html/tiny_mce/plugins/. Avremo così la cartella public_html/tiny_mce/plugins/ajaxfilemanager/.

Per prima cosa impostiamo correttamente il file public_html/tiny_mce/plugins/ajaxfilemanager/inc/config.base.php con i giusti parametri (login, formato file, percorsi).

In particolare, i percorsi ipotizzando che il nostro dominio si chiami www.miodominio.it e le immagini le uploadderemo nella cartella public_html/img con chmod a 777 (avremo anche una cartella session in public_html/session con chmod a 777 per la cache):

/* ……… */
define(‘CONFIG_SYS_DEFAULT_PATH’, ‘../../../img/’);
define(‘CONFIG_SYS_ROOT_PATH’, ‘../../../img/’);
define(‘CONFIG_SYS_FOLDER_SHOWN_ON_TOP’, true);
define(“CONFIG_SYS_DIR_SESSION_PATH”, ‘../../../session/’);
/* ……… */
define(‘CONFIG_WEBSITE_DOCUMENT_ROOT’, ‘/home/utente/public_html/’);
/* ……… */

“Tutti” i percorsi devono avere il percorso relativo alla posizione public_html/tiny_mce/plugins/ajaxfilemanager/ .

Fatto questo possiamo impostare il nostro TinyMCE con le chiamate di callback dovute.

L’esempio di configurazione, di seguito, è standard: leggendo il codice possiamo personalizzarlo come vogliamo.

Nella pagina del form con un input testuale multilinea con l’ipotetico nome id=”input_txt” inseriamo nei tags <script></script> il seguente codice:

<script>
tinyMCE.init({
mode : “textareas”,
theme : “advanced”,
plugins : “inlinepopups,advimage,media”,
theme_advanced_buttons1 : “bold,italic,underline,separator,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,bullist,numlist,undo,redo,link,unlink,image,removeformat,anchor,blockquote,code”,
theme_advanced_buttons2 : “”,
theme_advanced_buttons3 : “”,
file_browser_callback : “ajaxfilemanager”,
theme_advanced_toolbar_location : “top”,
theme_advanced_toolbar_align : “left”,
theme_advanced_statusbar_location : “bottom”,
width : “676″,
height : “300″,
extended_valid_elements : “a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]“,
apply_source_formatting : true,
relative_urls : false,
remove_script_host : false,
document_base_url : “<?=SITE_URL?>”,
languages : “it”,
theme_advanced_resize_horizontal : false,
theme_advanced_resizing : true,
convert_newlines_to_brs : false,
force_br_newlines : false,
force_p_newlines : false
});
function ajaxfilemanager(field_name, url, type, win) {
var ajaxfilemanagerurl = “http://www.miodominio.it/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php”;
switch (type) {
case “image”:
ajaxfilemanagerurl += “?type=img”;
break;
case “media”:
ajaxfilemanagerurl += “?type=media”;
break;
case “flash”: //for older versions of tinymce
ajaxfilemanagerurl += “?type=media”;
break;
case “file”:
ajaxfilemanagerurl += “?type=files”;
break;
default:
return false;
}
var fileBrowserWindow = new Array();
fileBrowserWindow["file"] = ajaxfilemanagerurl;
fileBrowserWindow["title"] = “Ajax File Manager”;
fileBrowserWindow["width"] = “782″;
fileBrowserWindow["height"] = “440″;
fileBrowserWindow["resizable "] = “yes”;
fileBrowserWindow["inline"] = “yes”;
fileBrowserWindow["close_previous"] = “no”;
tinyMCE.activeEditor.windowManager.open(fileBrowserWindow, {
window : win,
input : field_name
});

return false;
}

</script>

Come potete vedere, abbiamo inserito nell’init di TinyMCE il richiamo alla funzione di callback file_browser_callback : “ajaxfilemanager” che fa riferimento alla funzione che abbiamo creato subito dopo.

Da notare che la variabile ajaxfilemanagerurl nella funzione ajaxfilemanager deve contenere l’url assoluto al file ajaxfilemanager.php.

Fatto questo possiamo caricare la pagina con il form via web e cliccare, quando abbiamo bisogno di inserire un’immagine, sull’icona IMMAGINE di tinymce e, successivamente quando ha caricato la popup del gestore immagini, clicchiamo sull’icona di fianco a Image Url e si aprirà la finestra di Ajax File Manager.

62 Comments »

  • Basile said:

    Qualcuno sa come integrare ajax file manager con mkportal?

  • Cionimba said:

    Qualcuno ha idea invece di come integrare ajax file manager nel TinyMCE di WordPress? Riesco a far apparire l’icona per il filebrowser callback, ma poi non succede niente. Non ho la più pallida idea di dove inserire la funzione ajaxfilemanager

  • Tom said:

    Ma dopo che faccio l’upload del file come faccio a fare in modo che compaia nella textarea. A me non succede.

  • morphey (author) said:

    @Cionimba, xke’ vuoi integrarlo in wordpress? a me sembra che il nuovo gestore che hanno integrato è il massimo dell’ottimizzazione (con ajax file manager appesantisci solamente).
    @Tom, quando apri il file manager dal tinymce, scegli l’immagine e la selezioni cliccando sull’apposito checkbox, successivamente clicchi su SELECT nella finestrella di sinistra.

  • marco said:

    Credo che l’opzione select al quale alludi non sia standard. Io anche se spunto la checkbox dell’immagine, non ho “select” nella colonna di sinitra.

  • marco said:

    Ho risolto la questione. Forse a qualcuno può essere utile.
    E’ necessario settare CONFIG_THEME_MODE del file config.base.php con l’editor che stiamo utilizzando. Nel mio caso TinyMCE.

  • marco said:

    Ancora una correzione. Mi riferivo a CONFIG_EDITOR_NAME e non a CONFIG_THEME_MODE . ;)

  • emanuele said:

    Salve ragazzi, volevo chiedervi una cosa in merito a questo articolo e cioè che in locale mi funziona bene tutto mentre quando pubblico tutto online sul mio sito non mi carica il tema di default, va impostato qualche parametro diverso da quelli visti sopra? ciao e grazie

  • morphey (author) said:

    ciao emanuele, si effettivamente ho omesso che l’editor l’ho impostato direttamente nel file di configurazione (via codice a mano) di AjaxFileManager.
    Per ovviare al problema, puo cambiare la seguente riga:

    var ajaxfilemanagerurl = “http://www.miodominio.it/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php”;

    con:

    var ajaxfilemanagerurl = “http://www.miodominio.it/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php?editor=tinymce”;

  • emanuele said:

    Ok morphey, funziona tutto. ma è possibile per esempio evitare l’upload di foto o di immagini che superino una larghezza di 600px per esempio?grazie ciao

  • morphey (author) said:

    ciao @emanuele, leggi il contenuto del file di configurazione di Ajax File Manager, ci sono i limiti per le immagini da impostare direttamente lì.

  • sito aggiornabile dal cliente - Serverplan Forum said:

    [...] immagini come AjaxFileManager (un howto per configurare i due framework lo trovi sul mio blog: TinyMCE: integrare perfettamente Ajax File Manager | blog.morphey.org ) __________________ morphey ———————- [...]

  • Marco said:

    Qualcuno potrebbe aiutarmi??
    Ho seguito la guida, però non mi funziona niente….
    Potreste rispiegare??
    Grazie!!

  • morphey (author) said:

    ciao, che problema hai esattamente?

  • Francesca said:

    Ciao, ho installato il tutto su server linux e funziona alla perfezione. HO dovuto installarlo anche su server windows ma purtroppo mi da un errore ed è questo:

    [object error].

    Cosa posso fare?

    Ringrazio in anticipo

  • Francesca said:

    ..l’errore [object error] me lo da quando provo a fare l’upload perchè il resto dell’interfaccia funziona perfettamente. Vedo le immagini che già ci sono (caricate in ftp) ma non riesco a fare l’upload di altre.

  • morphey (author) said:

    ciao, ma l’errore te lo restituisce php oppure javascript?

  • Gino said:

    Salve ragazzi, avrei un problema con gli indrizzi relativi. Quando seleziono l’immagine che voglio inserire nella textarea il programma mi aggiunge all’indirizzo http://127.0.0.1 (in locale) anche il percorso “completo” del file…ovviamente non mi viene visualizzato nulla. (la cartella dove effettuo l’upload dei file è FILES)
    http://127.0.0.1/c:/programmi/easyphp1-8/www/iscrizioniswan/tinymce_3_2_2/jscripts/files/1.jpg. Sotto le impostazioni del file config_base.php

    (‘CONFIG_SYS_DEFAULT_PATH’, ‘../../../../files/’);
    (‘CONFIG_SYS_ROOT_PATH’, ‘../../../../files/’);

    (‘CONFIG_SYS_FOLDER_SHOWN_ON_TOP’, true); (“CONFIG_SYS_DIR_SESSION_PATH”, ‘../../../../session/’);
    (“CONFIG_SYS_PATTERN_FORMAT”, ‘list’);
    Dove sbalglio?

    Grazie mille

  • Gino said:

    Il primo problema l’ho risolto. Ultimo problema ;) …Quando accedo alla popup seleziono prima un’immagine, poi spunto il checkbox (thumbnails) ma non mi appare l’anteprima.

  • Francesca said:

    Ciao Morphey, me lo restituisce javascript da internet explorer. Invece con mozilla gira il loading all’infinito ma non carica nulla.

  • morphey (author) said:

    per @francesca: sul server dove lo provi, hai per caso mod_security attivo? ho riscontrato lo stesso problema con una regola di mod_security. Per ovviare, l’ho disattivato con queste direttive nell’.htaccess (solo per mod_security2):

    SecRuleEngine off

    per @gino: ti restituisce un errore javascript?

  • Gino said:

    Ciao e grazie per la risp!
    Non mi restituisce nessun errore. L’upload e l’inserimento funzionano bene. Le immagini che compaiono nella pop up le posso visionare solo cliccando sullo stemma vicino ogni foto (appare una specie di galleria-lightroom), ma se attivo il checkbox (thumbnails) le anteprime sulla destra non vengono visualizzate!?!? al loro posto c’è il segna posto immagini.

  • Francesca said:

    Morphey ho cercato in ftp l’ .htaccess ma non lo trovo, che aruba lo gestisca diversamente?

  • Francesca said:

    parlo sempre di server windows aruba

  • morphey (author) said:

    uhm, se è windows ho qualche dubbio. Dovresti far controllare lato-server gli error_logs per vedere se, richiamando la pagina, riceve qualche errore il server web.

  • Francesca said:

    Ho convertito da server windows a linux e stranamente mi da lo stesso errore. Eppure gli stessi file sono presenti su un altro dominio linux e funziona tutto. COme è possibile?

  • Francesca said:

    Morphey ho risolto, dopo la conversione a linux continuavo a puntare su windows. Cmq a quanto pare è proprio windows e permessi vari che gli danno fastidio.
    Ciao

    F.

  • morphey (author) said:

    ciao, sono contento che hai risolto :) Fammi sapere se ti trovi bene

  • Francesca said:

    Ottimamente Morphey, ti ringrazio per il tutorial.. :)

  • william said:

    Ciao morphey, ciao a tutti…

    perfavore ho bisogno del vostro aiuto!!
    ho provato in tutti i modi ma non riesco a integrare Ajax File Manager con tinymce…
    non potete inviarmelo già integrato e con qualche direttiva per il funzionamento?

    please! non posso andare avani a tentativi!!

  • morphey (author) said:

    ciao, che problema hai esattamente ?

  • Megarospo said:

    Sembra che funzioni tutto ma una volta selezionata l’immagine dentro ajaxmanager, dove devo cliccare per caricarla nel testo? Mi sfugge qualcosa? ciao ciao.
    Nell’ipotesi che ci siano molti utenti che possono scrivere e caricare immagini, come è possibile limitare l’accesso ad ognuno alla sola propria cartella?

  • morphey (author) said:

    Ciao, per inserirla nel testo devi selezionarla con il checkbox che trovi sotto l’immagine nel filemanager e poi clicchi sul tasto che compare sulla sinistra (Insert).
    Per quanto riguarda l’accesso degli utenti, non credo che la libreria sia sviluppata per questo.
    Ti consiglio di leggere la documentazione che trovi sul loro sito http://www.phpletter.com/Demo/Tinymce-Ajax-File-Manager/

  • Stefano said:

    Ciao,
    dopo aver effettuato l’installazione in locale, quando vado a caricare un immagine nel campo url mi compare:
    “http://localhost/C:/xampp/htdocs/apl/amministrazione/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager/upload/immagine.jpg”

    E chiaramente l’immagine risulta illeggibile dallo script. Cosa ho sbagliato nella configurazione?

  • morphey (author) said:

    ciao, probabilmente hai impostato in modo errato il path nella configurazione dello script.
    Se usi windows, come path prova a mettere i doppi slash invece che gli slash normali del tipo:
    [code]
    "c:\\xampp\\htdocs\\....."
    [/code]

  • sadrac said:

    Salve a tutti. Ho seguito tutta la procedura, ma quando vado a cliccare sul tasto accanto al campo dell’url dell’immagine (nella popup che compare cliccando sul tasto immagine dell’editor) non compare nessuna finestra (quindi ajaxfilemanager non compare);

    Con Internet Explorer mi da un errore in basso a sinistra (‘Errore nella visualizzazione della pagina’), menstre con Firefox mi carica all’infinito senza che compaia nulla.

    Cosa ho sbagliato?

  • morphey (author) said:

    ciao, probabilmente è un errore javascript per codice messo male… posta il link al tuo sito oppure vedi negli errori di firefox in che punto della pagina lo riscontra…

  • sadrac said:

    Il sito è in locale, quindi non posso postare il link. Come faccio a vedere gli errori di FireFox? Lì mi carica solo all’infinito, è in IE che mi dice errore nel caricameto…se mi dà la riga dell’errore, a quale file si riferisce?

  • Matt said:

    a me non mi fa inserire l’immagine che carico. COME DEVO FARE ?

  • morphey (author) said:

    Ciao,
    ti da un errore specifico?
    Hai controllato gli error_log di apache per vedere se c’è qualche tipo di problema?

  • Matt said:

    apparentemente nessun problema, mi apre il browser in ajax per caricare le foto, ma poi per inserire la foto caricata, non ci dovrebbe essere un pulsante inserisci o qualcosa del genere ?

  • Matt said:

    eventualmente come si può usare il file popup_imagemanager.js che c’è su joomla ? credo che faccia la stessa cosa di ajaxfilemanager giusto ?

  • Matt said:

    in pratica non mi compare il tasto select o inserisci, ma come mai che devo fare ?

  • morphey (author) said:

    Ciao,
    popup_imagemanager.js di joomla credo sia personalizzato proprio per l’utilizzo con esso.
    Puoi usare ajaxfilemanager benissimo.
    Controlla nel browser (ti consiglio tramite Firefox+Firebug) gli eventuali errori javascript e fammelo vedere.
    Ma è pubblico il sito dove lo stai mettendo?

  • Matt said:

    sto lavorando in locale ancora, il tasto inserisci non mi compare da nessuna parte, solo se trascino l’immagine sul campo url della finestra iniziale di tiny mce me la inserisce. Ok ora provo e posto

  • Matt said:

    non porta nessuno errore, come faccio a capire che c’è errore con firebug, non l’ho mai usato e cmq non capisco ancora come mai sto tasto inserisci non si vede mbà

  • Matt said:

    è normale che quando clicco sull’icone dell’immagine per inserire le foto del mio editor messo in locale in basso mi compaia soltanto javascript:;, mentre sull’esempio del sito di ajaxmanager ci sia questo javascript:tinyMCE.execInstanceCommand(‘mce_editor_0′,’mceAdvImage’); ?

  • Matt said:

    nessuno mi sa dire come poter fare ?

  • At Ot said:

    Ciao ragazzi, qualcuno di voi ha provato a localizzare ajaxfilemanager in italiano? Io si, copio il file della lingua inglese lo rinomino e traduco tutte le frasine, ma quando vado a impostare la mia lingua (in config.base) lo script smette di funzionare correttamente, mah :) idee? Ps. non lo fa se semplicemente copio il file della lingua inglese e lo rinomino e imposto questa finta nuova lingua.

  • Matt said:

    io sto ancora aspettando la risposta del come mai dopo che carico la foto non mi visualizza il tasto inserisci

  • Marco said:

    Salve… dovrò risolvere lo stesso problema…

    Nessuno lo ha mai provato con tinyMCE_3_2_7 e Ajax File Manager v1.0 rc4???

  • Dario said:

    Ciao,
    ho provato ad integrare tnymce con ajax filemanger seguendo il tuo turial su server aruba windows (php è supportato).

    Purtroppo quando cerco di uploadare un file cliccando upload di fianco al campo sfoglia ottengo un errore: “SyntaxError: Errore di sintassi”

    Da cosa potrebbe dipendere?

    Grazie mille
    Dario

  • morphey (author) said:


    Dario:

    Purtroppo quando cerco di uploadare un file cliccando upload di fianco al campo sfoglia ottengo un errore: “SyntaxError: Errore di sintassi”

    Ciao,
    hai provato a vedere i logs di php cosa dicono?
    Comunque quasi sicuramente il problema è mod_security di aruba che ha qualche regola che blocca in errore 500 alcune chiamate.

  • andrea said:

    a me il tasto select nn compare quando metto la visualizzazione delle thumbnails…qualche soluzione? prima non appariva proprio, ho cambiato come aveva scritto marco l’impostazione CONFIG_EDITOR_NAME (mettendo tinymce) in config.base.php, e il tasto ora appare ma solo in details…potrebbe anche andare ma preferirei riuscire a farlo apparire anche nella visualizzazione delle thumbs. grazie per l’attenzione

  • Giovanni said:

    Salve, ho seguito la guida, prima era già funzionante il mio tinymce e volevo aggiungere questo afm, ma ora la textarea non è più tinymce ma una semplice textarea, da cosa dipende?

  • jean said:

    Salve, su un hosting windows aruba non riesco a navigare nelle sottocartelle della cartella che ho dedicato agli upload. Come mai?

  • morphey (author) said:

    @andrea e @Giovanni : controllate gli errori javascript nel browser. Sicuramente c’è qualche settaggio che non va.

    @jean : non ho provato su hosting windows aruba, ma penso sia un problema di permessi sulle cartelle o di percorsi assoluti. Controlla gli errori php o fai una pagina .php di test che legge l’albero delle directory di quella cartella.

  • Losco said:

    Ciao Morphey,
    grazie mille per la guida, la versione tinymce+afm proposta phpletter è un ottima soluzione, ma come ci fai notare “è stantia”.

    Per quanto riguarda il problema che molti hanno riscontrato:
    dopo la corretta configurazione, selezionando un file, il tasto select che appare risulta privo di eventi… ho notato quanto segue,

    Molti staranno utilizzando wamp( mamp, xamp ) e firefox e chrome ( ie nomn saprei ), restituiscono un errore di sicurezza, nel dettaglio nel file /ajaxfilemanager/jscripts/for_tiny_mce.js nella cartella dei plugin di tiny_mce, sulla riga 9.

    Questo avviene quando il plugin viene inizializzato, poi l’evento sul tasto select restiuisce un oggetto vuoto.

  • Losco said:

    In realtà l’errore era dovuto ad una cattiva configurazione…
    Nel file php ajaxfilemanager/inc/config.base.php, con la costante (CONFIG_WEBSITE_DOCUMENT_ROOT , ”) sotto codeigniter funziona, sempre con relative_urls = false nel config di tinyMCE

  • Anna Pallotti said:

    Ciao, cercavo informazioni diverse sempre su TinyMCE, ma leggendo i commenti mi sono imbattuta in quello di Jean: è passato del tempo ma magari può essere utile a qualcun altro. Sull’hosting Aruba bisogna fare attenzione a trovarsi nella cartella public per fare cose di questo genere, sulle altre non è possibile impostare permessi di upload o modifica dei file.

  • Enrico said:

    Ciao, mi funziona tutto (upload, selezione immagine ecc) – L’unico problema è che alla pressione del tasto Insert, viene inserita l’immagine ma manca l’indirizzo SRC del file… quale può essere l’errore?

    Grazie!

  • Enrico said:

    Ci rinuncio visto che con Chrome non funziona praticamente nulla.

Leave your response!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.