Salve,
in questo periodo ho dedicato qualche giorno del mio tempo libero alla realizzazione di un sito no profit che comprende ed estende la galleria Zoom
Era necessario che il lavoro venisse svolto in php/mysql, ambiente di sviluppo che per la verita' non mi e' molto congeniale, ho quindi aprofittato molto delle informazioni trovate qui, ragion per cui cerco di restituire qualche suggerimento sulla base delle (poche) esperienze fatte di questi giorni.
Il contesto in cui ho operato e':
joomla 1.0.13 Stable
zoom media gallery 2.5.1 RC4
I problemi per i quali non ho trovato una soluzione leggendo il forum:
Problemi con le funzioni ajax (pulsanti mancanti nella toolbar di gestione gallerie, votazione foto, inserimento foto nel raccoglitore, etc..)
Soluzioni trovate:
le routine ajax ritornano in callback il risultato dell'elaborazione in formato xml (responseXML). Per fare questo viene preparata una risposta di tipo xml, la quale richiede un header di tipo text/xml, impostato tramite la funzione $zoom->startXML.
Tutte le header http devono essere inviate prima dell'output di qualsiasi altro output, dal momento in cui viene inviato un output di tipo diverso non e' piu' possibile inviare altre header http.
I problemi con le routine ajax di zoom gallery sono dovuti al fatto che in alcuni casi nel momento in cui viene chiamata la funzione $zoom->startXML e' gia' stato inviato dell'output, rendendo di fatto inefficace la chiamata alla funzione.
Cio' comporta che la risposta che giunge al metodo di callback non e' nel formato che questo si aspetta responseXML ma bensi di tipo responseText, di fatto illeggibile al metodo che la elabora.
Quali sono i casi che generano un output indesiderato, prima dell'invio dell'header che imposta il tipo di output xml ?
1) messaggi di errore:
nel file lib/inserts.class.php vi e' questa definizione:
define( "_VALID_MOS", 1);
quando questo file viene richiamato da www/ajaxcallback.php si genera un errore per il fatto che questa define e' gia' presente nel file chiamante. La cosa puo' essere risolta sostituendo la riga
define( "_VALID_MOS", 1);
con
if (!defined("_VALID_MOS", 1)) {
define( "_VALID_MOS", 1);
}
all'inizio del file lib/inserts.class.php
oppure inserendo prima della define questa riga:
error_reporting(0);
per fare in modo che non venga generato un messaggio d'errore in corrispondenza della define ridondante.
2) incorretta configurazione
le funzioni ajax utilizzano la variabile di configurazione
$mosConfig_live_site
e' importante che sia impostata con lo stesso tipo di url che utilizzate per navigare all'interno dell'applicazione.
Se ad esempio navigate la url:
http://10.0.0.1/joomlaed impostate la variabile $mosConfig_live_site con:
http://localhost/joomlaavrete sicuramente problemi.
3) occhio ai caratteri all'inizio e alla fine dei file .php
qualsiasi carattere al di fuori dei tag che contengono lo script php generano output che determina i predetti problemi con le header http.
Basta anche un solo spazio come primo carattere nel file lib/inserts.php per rendere inefficaci le routine ajax di zoom gallery.
Da notare che molti file php in zoom gallery sono privi del tag di chiusura php alla fine del file. Questo non sembra generare problemi, ad ogni modo e' un'anomalia che e' meglio sistemare.
Problema di lentezza nella visualizzazione immagini con gallerie ricche di file.
Ho riscontrato una progressiva lentezza che aumenta all'aumentare dei file nella galleria, nel mio caso con circa 200 immagini la cosa diventa insostenibile..
La causa di cio' e' nella funzione di presentazione (slideshow), se abilitata (non occorre utilizzarla basta che sia abilitata nel file di configurazione) richiama una porzione di codice scellerata la quale ad ogni visualizzazione immagine si spazzola l'intera galleria creando due istanze di classe image per ogni immagine, con relative query sql. Con 200 immagini si ha un'iterazione che genera 400 istanze di classe..
Non avendo necessita' di tale funzione e' stato sufficente disattivarla per eliminare il problema, a chi invece dovesse servire consiglio assolutamente di riscriverla.
Spero di essere stato utile a qualcuno.
Saluti
mauro
--