Nel precedente articolo ho illustrato come configurare un sito multi lingua in MODx e come effettuare il cambio lingua su tale sito.
Oggi propongo una soluzione multi lingua SEO friendly utilizzando la tecnica delle cartelle di lingua virtuali ovvero creando una struttura simile a:
"http://miosito.it/it/pagina.html"
"http://miosito.it/en/pagina.html"
dove it e en non sono effettive cartelle nel file system bensì dei parametri intercettati ed utilizzati da MODx per attivare il contesto di lingua più adatto.
Ti senti pronto?
NOTA: la lettura e comprensione dell’articolo “MODx – multi lingua & sessione” è fondamentale per poter comprendere i passaggi esposti in questo tutorial!
MODx – SEO Friendly URL
Il primo step consiste nell’abilitare le SEO friendly url nel CMS. Tale impostazione converte gli url parametrici standard in indirizzi virtuali senza parametri che sono la condizione necessaria per un sito completamente indicizzabile dai motori di ricerca!

Come si fa:
- dal menu
Sistema -> Configurazione Sistemaapplica il filtro “URL Semplici (Friendly URL)” se modifica il valore della chiave “friendly_urls”. - dal Pannello Risorse spostati sulla tab Files e rinomina il file
ht.accessin.htaccess(lo puoi fare anche via FTP)
NOTA: la soluzione proposta in questo articolo NON richiede modifiche al file .htaccess se non per l’impostazione della opzione RewriteBase la quale dipende dalla posizione di installazione e configurazione del server!
MODx – base_url
Ora è necessario che tutti i link verso le risorse appartenenti ad un contesto di lingua puntino all’interno di una cartella virtuale legata alla lingua rappresentata dal contesto stesso.
Tutte le risorse del contesto “en” dovranno puntare su indirizzi simili a “/en/risorsa.html”.
Per fare questo possiamo aggiungere la chiave “site_url“ al contesto di lingua.
“site_url” viene utilizzata da MODx per costruire gli indirizzi delle risorse.

Come si fa:
- apri la schermata di modifica del contesto cliccando sul titolo del contesto dal Pannello Risorse sulla sinistra del manager
- spostati sulla tab “Settaggi Contesto”
- crea la nuova chiave di configurazione con il valore “{site_url}en/” (“en” è la cartella per l’inglese…)
- salva
MODx – Gateway Plugin
Ora viene il punto più complesso ovvero la creazione di un plugin che consenta a MODx di:
- estrapolare la cartella virtuale di lingua dall’url
- interpretare tale parametro e caricare il contesto di lingua
NOTA: in molti tutorial che ho letto si propongo soluzioni piuttosto complesse basate su una combinazione di plugin + modifica .htaccess; in questo articolo propongo una soluzione più semplice in quanto tutta la logica è contenuta nel sorgente del plugin ed è sufficiente un copia/incolla del codice proposto per implementarla nel proprio sito web.
<?php
/**
* Plugin Cambio Lingua con Sessione
*/
if ( $modx->context->get('key') != "mgr" ) {
if ( isset($_GET['q']) ) {
if ( substr(strrev($_GET['q']),0,1) !== '/' && strpos($_GET['q'],'.') === false ) $_GET['q'].= '/';
if ( strpos($_GET['q'],'/') ) {
$_GET['cultureKey'] = substr($_GET['q'],0,strpos($_GET['q'],'/'));
$_GET['q'] = $_REQUEST['q'] = substr( $_GET['q'], strlen($_GET['cultureKey'])+1, 600 );
}
}
if ( isset($_GET['cultureKey']) ) {
$modx->switchContext($_GET['cultureKey']);
$_SERVER['REQUEST_URI'] = str_replace(array($_GET['cultureKey'],'//'),array('','/'),$_SERVER['REQUEST_URI']);
}
}
Come si fa:
Copia il codice proposto in questo paragrafo e sostituiscilo al sorgente del plugin creato nel precedente articolo.
Risorsa Statica:
Il sorgente di tale plugin è disponibile per il download, il fork, o il PR su GitHub:
https://github.com/movableapp/MODx-Utils/blob/master/plugins/seo-multilanguage-context-switcher.php
Puoi copiare da lì la versione più aggiornata del codice di questa risorsa oppure integrarla come risorsa statica nella tua installazione MODx.








