Per aver cannato il mio nome e postato 2 volte dovrei proporti un un BAN...
(scherzo...).
Comunque, per quanto riguarda l’uso delle template variabili ti rimando all’ottimo tutorial. Per ora uno dei punti di forza di Modx è proprio la presenza di documentazione, quindi ne consiglio l’utilizzo.
Per quanto riguarda il sito multilingua, ti posso spiegare il meccanismo, ma per quanto la modifica del codice è una cosa che deve competere a te.
Innanzitutto la struttura del sito:
Modx permette una cosa molto simpatica, cioè la duplicazione delle strutture. Quindi sfruttando questa sua capacità ho creato una template variabile legata ad ogni pagina alla quale tramite una select assegnavo la lingua di appartenenza della pagina, IT|EN|FR nel mio caso. La struttura delle cartelle presentava un folder principale che diventava la home del sito in lingua, tutto il resto della struttura dipendeva da questa cartella, in questo modo:
-->italian home
-->pagina 1
-->pagina 2
-->cartella 1
-->pagina 1 di cartella 1
ecc. ecc.
Una volta realizzata questa struttura è stato sufficiente duplicare l’intera struttura cambiandola in questa maniera:
-->english home
-->pagina 1
-->pagina 2
-->cartella 1
-->pagina 1 di cartella 1
ecc. ecc.
Ovviamente però a tutte le pagine della nuova struttura ho dovuto cambiare il valore della template variabile da IT a EN.
All’esterno di queste strutture ho creato una sola pagina avendo una struttura del tipo:
-->language selector
-->italian home
-->pagina 1
-->pagina 2
-->cartella 1
-->pagina 1 di cartella 1
ecc. ecc.
-->english home
-->pagina 1
-->pagina 2
-->cartella 1
-->pagina 1 di cartella 1
ecc. ecc.
ed ho impostato la start page del sito su language selector. Tramite opportuno codice JS hi rilevato la lingua utente, e in base alla rilevazione, quando l’utente entra nel sito viene automaticamente reindirizatto verso la home della lingua di appartenenza e viene creata una variabile di sessione con il codice identificativo della lingua.
Ora viene il difficile.
Per la necessità di parametrizzare qualcuno degli snippet che non prevedevano l’uso multilingua ho dovuto creare un file di costanti, che tramite uno snippet chiamato getConstants (che fantasia....) era in grado di restituirmi le costanti in base alla lingua prescelta....(usando come prefisso il codice lingua).
Fatto questo ho creato un menu che rispondesse alle mie esigenze utilizzando un meccanismo molto semplice. Quando l’utente entra in una "zona" linguistica del sito, non ne può più uscire se non cliccando su appositi link mostrati a video con le classiche bandierine.
Per quanto riguarda il menu lo script rilevava semplicemente quale era la homepage della zona linguistica e presentava la struttura partendo da quel punto. Utilizzando Dropmenu la cosa dovrebbe essere fattibile utilizzando un template diverso per ogni lingua e parametrizzando la chiamata a Dropmenu indicando da quale pagina debba partire a creare l’elenco del menu, quindi semplicemente indicandogli l’id della home page della zona linguistica.
Questo è valido anche in caso di deep linking perchè in automatico viene rilevata qual’e la zona linguistica tramite un snippet posto nel template stesso che in caso di mancanza della variabile di sessione che citavo sopra, la imposta rilevando il valore della template variabile della pagina stessa, mentre il menu dovrebbe essere in grado di capirlo in automatico conoscendo qual è l’homepage da cui dipende la pagina.
L’esigenza di avere un menu personalizzato nasceva per la necessità di avere la homepage della zona linguistica allo stesso livello delle pagine direttamente sottostanti alla homepage stessa. Utilizzando Dropmenu avrei invece avuto la homepage in alto e tutto il resto della struttura indentato mostrando la reale struttura delle cartelle. Diciamo quindi uno sfizio grafico più che strutturale.
Molti degli snippet lavorano perfettamente all’interno di una struttura come questa, non facendo distinzione in quale zona linguistica si trovino. L’unico problema, per la maggior parte è stato proprio la parametrizzazione delle stringhe di testo, che come detto sopra è stato ovviato con l’utilizzo delle costanti.
Caso diverso per il modulo di ricerca..., il quale è stato modificato (ma ti assicuro che è stato molto semplice) semplicemente istruendolo a restituire i risultalti delle pagine che avevano lo stesso valore per la template varibile di quello attualmente impostato nella variabile di sessione. In questo modo evitavo di ottenere pagine della zona inglese, mentre l’utente si trovava nella zona italiana. Ovviamente se l’interesse non sia quello invece di avere una ricerca globale a discapito della zona linguistica in cui ci si trova.
Ogni snippet che è stato utilizzato ha richiesto modifiche, ma che nella maggior parte dei casi si è trattato semplicemente della parametrizzazione delle stringhe, in altri invece modifiche del codice per farlo lavorare all’interno della zona linguistica indicata nella variabile di sessione. Ti assicuro che a conti fatti è stato così semplice che se penso alle difficoltà incontrate nel sviluppare siti multilingua con altri CMS, quasi non ci credevo.
Ora mi è impossibile scendere di più nel dettaglio, perchè la necessità di modificare gli snippet deriva dall’uso che ne fai e da quale utilizzi. Per esempio, posso dirti che non c’è stato nessun problema con il blog. Ogni zona aveva il suo blog che funzionava alla perfezione. Senza la necessita di nessuna modifica se non l’impostazione della pagina di partenza e la lingua utilizzata (che sono parametri già presenti nello snippet).
Quindi a conti fatti questa strutturazione non richiede molto sforzo, se non la necessità di governare bene la lingua di sessione, ma il meccanismo te l’ho spiegato, quindi non ti rimane che sfruttarlo.
Ciao
[nota per Edipo] Visto che mi sembri masticare ottimamente l’inglese, se ritieni che questa soluzione possa essere d’interesse per la comunità internazionale, ti inivito pure a tradurre il post e porlo dove ritieni più opportuno nel forum internazionale. Ciao