Predisposizione della cache per blocchi e moduli multilingua

Un article de Wiki Maximus CMS.

redazione in corso


Sommaire

Premessa

La cache standard di Maximus CMS consente, se necessario ed ove previsto, di differenziare i files di cache a seconda dell'utilizzatore (amministratore, utente, visitatore) e questo al fine di non consentire ai non abilitati di accedere ad informazioni riservate.


Se ci fosse la stessa cache, non potrebbero esistere informazioni riservate agli utenti o agli admin in quanto, utilizzando lo stesso file di cache, anche gli anonimi vedrebbero queste informazioni.


E' per questo che, dovendo predisporre le linee di codice per l'attivazione della cache di un blocco o di un modulo, come già spiegato negli altri tutorial sullo stesso argomento, bisognerà per prima cosa verificare il livello di differenziazione gerarchica da attibuire al modulo / blocco da visualizzare:

  • cache generica (vale per tutti gli utilizzatori)
  • cache per livello utente (visibile dagli utenti e dagli amministratori)
    • cache a livello utente personalizzata (ogni utente ed ogni amministratore ha la propria cache)
  • cache per livello amministratori (visibile dai soli amministratori)
    • cache a livello amministratori personalizzata (ogni amministratore ha la propria cache)


L'argomento esaminato in questo tutorial, è quello di consentire una ulteriore differenziazione necessaria nei siti in cui è attivato il multilinguaggio, consentendo agli utilizzatori la possibilità di cambiare la lingua del sito sia in maniera fissa (tramite il proprio Account) sia temporanea (tramite scelta sui programmi predisposti, per esempio il blocco linguaggio).


In questo caso, però, è necessario predisporre i files di cache nelle varie lingue, da visualizzare a seconda delle necessità, altrimenti verrebbero utilizzati sempre gli stessi file di cache (con la stessa lingua) e pertanto non verrebbe effettuato il cambio del linguaggio.


Aggiungiamo la lingua alle linee di codice della cache

Per poter consentire la predisposizione dei files di cache nelle varie lingue, dovremo sfruttare la variabile $currentlang, già inizializzata dal sistema per conoscere la lingua scelta dall'utilizzatore, inserendola nelle linee di codice della cache già presenti in ogni modulo o blocco.


Andiamo ora ad esaminare varie tipologie di cache prendendo ad esempio alcuni blocchi già predisposti e tenendo presente che, una volta capito il meccanismo, potremo personalizzare questo codice anche per ulteriori esigenze (per esempio blocchi o moduli riservati a gruppi, ecc.)


Tipologia con un unico file di cache

Nei blocchi o moduli dove non c'è bisogno di differenziare il tipo di utente, in quanto non ci sono informazioni da riservare in maniera specifica, si può utilizzare il codice per predisporre un solo file di cache per ogni linguaggio (in esempio il block-Max_Wiki.php)


global $currentlang;

define( 'CACHE_BL_MAXWIKI', '3600' ); // tempo di ritenzione in secondi, 3600=60 min.)
if ( $content = opencacheb ( "Bl_MaxWiki_".$currentlang."", 'html' , "".CACHE_BL_MAXWIKI."", '1' ) ) {
} else {
  ...................................................
  ................. codice del blocco ...............
  ................................................... 
closecacheb ( "".$content."", "Bl_MaxWiki_".$currentlang."", 'html' , "".CACHE_BL_MAXWIKI."", '1' );
}


Tipologia con tre files di cache

Con questa tipologia avremo tre file di cache per ciascuna lingua prevista dal sito (in esempio il block-Central_Forums)

  • una cache per tutti gli amministratori
  • una cache per tutti gli utenti
  • una cache per tutti gli anonimi
global $currentlang; 
$block_name = "Central_Forums"; 
get_blang("$block_name"); 

define( 'CACHE_BL_CFORUM', '900' ); // tempo di ritenzione in secondi, 3600=60 min.) 
if (defined('ADMIN_ALLOW')) { 
  $block_retention   = CACHE_BL_CFORUM; 
  $block_name_cache = "BlocCForumsAdmin_".$currentlang.""; 
  $extension        = "php"; 
} elseif (defined('USER_ALLOW')) { 
  $block_retention   = CACHE_BL_CFORUM; 
  $block_name_cache = "BlocCForumsUser_".$currentlang.""; 
  $extension        = "html"; 
} else { 
  $block_retention   = CACHE_BL_CFORUM; 
  $block_name_cache = "BlocCForums_".$currentlang.""; 
  $extension        = "html"; 
}

if ( $content = opencacheb ( "".$block_name_cache."", "".$extension."", "".$block_retention."", 1 ) ) {
} else {
  ...................................................
  ................. codice del blocco ...............
  ................................................... 
closecacheb ( "".$content."", "".$block_name_cache."", "".$extension."", "".$block_retention."", 1 );
}


Tipologia con file di cache personalizzati

Con questo tipo di codice avremo files di cache personalizzati per gli admin e gli utenti e per tutte le lingue selezionate ( in esempio il block-User_Info_SH )

  • una cache per ciascun amministratore
  • una cache per ciascun utente
  • una cache unica per tutti i visitatori anonimi
global $currentlang, $user, $cookie;
$block_name = "User_Info_SH";
get_blang("$block_name");
cookiedecode($user);
$uname = $cookie[1];

define( 'CACHE_BL_USERINFO_SH', '600' ); // tempo di ritenzione in secondi, 600=10 min.)
if (defined('ADMIN_ALLOW')) {
  $block_retention  = CACHE_BL_USERINFO_SH;
  $block_name_cache = "SH_UserInfoAdmin_".$uname."_".$currentlang."";
  $extension        = "php";
} elseif (defined('USER_ALLOW')) {
  $block_retention  = CACHE_BL_USERINFO_SH;
  $block_name_cache = "SH_UserInfoUser_".$uname."_".$currentlang."";
  $extension        = "html";
} else {
  $block_retention  = CACHE_BL_USERINFO_SH;
  $block_name_cache = "SH_UserInfo_".$currentlang."";
  $extension        = "html";
}

if ( $content = opencacheb ( "".$block_name_cache."", "".$extension."", "".$block_retention."", 1 ) ) {
} else {
  ...................................................
  ................. codice del blocco ...............
  ................................................... 
closecacheb ( "".$content."", "".$block_name_cache."", "".$extension."", "".$block_retention."", 1 );
}


Piermin 25 mar 2007 h 10:20