Joomla 2.5 e Geshi

Ebbene nonostante il rilascio della versione 2.5.3 di Joomla il plugins GeSHi (Generic Syntax Highlighter) è rimasto invariato, ovvero continua a non funzionare con l’editor WYSIWYG del CMS. Le ragioni del problema sono, a mio avviso, banali – non capisco per quale ragione il team di sviluppo Joomla non vi abbia ancora posto rimedio.

L’utilizzo di Geshi è veramente semplice, basta inserire il codice da evidenziare tra i tag HTML <pre></pre>, l’esatta sintassi è la seguente:

<pre xml:lang="NomeLinguaggio" lines="true|false"> Linee di codice </pre>

I due parametri lang e lines definiti in questo modo hanno senso solo per Geshi, per il tag HTML <pre> passano del tutto inosservati.

Il parametro lang serve per specificare il linguaggio, ad esempio java, php, pascal, … al momento attuale Geshi supporta più di 80 linguaggi, Joomla ne implementa solamente una piccola parte.

Il parametro lines è semplicemente un flag che stabilisce se numerare progressivamente le linee o no.

Il motivo del mancato funzionamento è che gli editor WYSIWYG non permettono l’inserimento diretto di codice HTML, questo viene immediatamente convertito in entità HTML al momento del salvataggio. Nel dettaglio la stringa <pre viene convertita in &lt;pre rendendo vano per Geshi ogni tentativo di individuare il codice da evidenziare. L’unico modo per risolvere il problema è disattivare l’editor e scrivere i contenuti direttamente come codice HTML, cosa decisamente molto scomoda, senza considerare che non sarà possibile aprire il contenuto con l’editor WYSIWYG pena la perdita di tutta la formattazione fatta da Geshi.

La soluzione che ho deciso di implementare non è certo una novità, ho tratto spunto da questo sito che presenta le modifiche per la versione 1.0 di Joomla, io le ho solo adattate alla versione 2.5. Si andrà a sostituire il tag <pre xml> con la stringa {geshi} i restanti parametri rimarranno invariati.

Procedura di modifica

La prima cosa da fare è copiare sul nostro computer i file di Geshi, questi risiedono nel percorso \plugins\content\geshi puntiamo il nostri client FTP verso l’istallazione di Joomla, identifichiamo la cartella geshi all’interno del percorso plugins\content  e trasferiamola sul nostro PC.

Facciamo una copia di backup della cartella geshi appena trasferita e teniamola al sicuro, questa copia non è da modificare, sarà l’unica copia ancora originale dopo la modifica.

All’interno della cartella geshi è presente il file geshi.php la dimensione  del file originale e di 2035 byte ed è composto da 72 linee. Apriamo questo file con un editor di testo, quello che preferiamo, se ha la possibilità di visualizzare il numero di linea è più facile.

 

La prima modifica da fare è alla linea 23, in questa posizione è presente questo codice:

if (JString::strpos($article->text, 'pre>') === false) { return true; }

dobbiamo modificarlo in questo modo:

if (JString::strpos($article->text, 'geshi}') === false) { return true; }

La seconda modifica è localizzabile alla linea 28 dove troviamo questo codice

$regex = "#<pre xml:\s*(.*?)>(.*?)</pre>#s";

dobbiamo modificarlo in questo modo:

$regex = "#{geshi\s*(.*?)}(.*?){/geshi}#s";

L’ultima modifica è in realtà un’aggiunta, è necessario inserire una nuova linea di codice alla posizione 61 dove è presente una linea vuota. Il codice dalla linea 59 alla 61 è il seguente:

$text = str_replace('&lt;', '<', $text); $text = str_replace('&gt;', '>', $text); $text = str_replace("\t", ' ', $text);

dobbiamo modificarlo aggiungendo una riga, ecco come dovrebbe diventare:

$text = str_replace('&lt;', '<', $text); $text = str_replace('&gt;', '>', $text); $text = str_replace('&amp;', '&', $text); $text = str_replace("\t", ' ', $text);

 

Bene, tutto fatto, ora possiamo salvare il file e ritornare a trasferire il tutto sul nostro sito Joomla. Attenzione al percorso deve essere esattamente quello da cui lo abbiamo prelevato.

Prima di effettuare i trasferimento possiamo montare ulteriori linguaggi, come dicevo prima Geshi ne supporta più di 80 ma Joomla ne installa solamente 11.

I linguaggi sono contenuti nel percorso plugins\content\geshi\geshi\geshi per installarne altri e necessario scaricare il pacchetto completo di Geshi dal sito ufficiale, al momento in cui scrivo la versione scaricabile è la 1.0.7.20, viene distribuito in formato zip e quindi deve essere decompresso. I file di linguaggio seguono il formato standard : NomeLinguaggio.php dove NomeLinguaggio è appunto il linguaggio che ci interessa, tipo ruby, ada, vb, c, … ed è proprio il valore per il parametro lang.

Copiamo i file di linguaggio che ci interessano e quindi trasferiamo il tutto via FTP.

Ora possiamo fare una prova, creiamo un nuovo contenuto in Joomla utilizzando l’editor WYSIWYG e scriviamo un testo di prova, ad esempio:

Prova di Geshi {geshi lang="html4strict"} <pre xml:lang="nome_linguaggio" lines="true|false"> CODICE DA EVIDENZIARE </pre> {/geshi}

pubblichiamo il contenuto e il risultato dovrebbe essere questo:

<pre xml:lang="nome_linguaggio" lines="true|false"> CODICE DA EVIDENZIARE </pre>

Per il momento è tutto.

I commenti sono chiusi.

Crea un sito o un blog gratuito su WordPress.com.

Su ↑