|
Una volta autenticati nel sistema, si procede alla selezione del database relativo alla terza installazione, delle tre installazioni di Joomla! è infatti questa quella in cui i contenuti vengono riuniti, e si eliminano le tabelle utilizzate per la gestione dei contenuti; si passa quindi, al database relativo alle altre due installazioni e si procede alla creazione delle viste che andranno a sostituire le tabelle eliminate. L'unione dei contenuti si ottiene, quindi, sempre grazie alla creazione, anche se più complesse della precedenti, di alcune viste: in questo caso, infatti, anzichè utilizzare per la definizione delle viste semplici query di selezione, si utilizzano query di unione. Con la clausola UNION è possibile riunire in un solo insieme, i cui nomi delle colonne sono definiti dai campi della prima query, i dati provenienti da estrazioni distinte. Oltre all'utilizzo della clausola UNION, si è proceduto ad un abile ridefinizione degli id che costituiscono le chiavi primarie degli elementi aggregati: la soluzione scelta, pur mantenendo identificabili gli elementi provenienti dalle varie installazioni, consente di riunirli senza interferenze. Analizziamone la logica. TRUNCATE((id+NUMERO_TABELLA)*NUMERO_MAX_TABELLE,0) As id Ad ogni id viene aggiunto un preciso "suffisso" che ne indica la tabella di provenienza, essendo id un valore intero si sceglie di aggiungere come "suffisso" distintivo una parte decimale. Nel caso considerato, la prima tabella è individuata dalla parte decimale 0.01, mentre la seconda dalla parte 0.02. Utilizzando questa logica, con un \textit{"suffisso"} costituito da due decimali si potrebbe procedere alla aggregazione di un massimo di 100 tabelle, da 0.00 a 0.99, ma aumentando il numero di decimali si può far crescere ulteriormente questo numero. Gli id così ottenuti hanno un valore univoco e distinto. Moltiplicando a questo punto tali valori per NUMERO_MAX_TABELLE e utilizzando la funzione TRUNCATE, si trasformano in interi tali valori decimali facendo "scorrere" prima della virgola il "suffisso" che identifica le tabelle: il primo contenuto proveniente dalla prima tabella sarà a questo punto indentificato dall'id 101, il secondo da 201 e così via, mentre gli equivalenti della seconda tabella saranno individuati dai rispettivi 102, 202 e così via. Leggermente diversa è la logica utilizzata nella seguente porzione di codice: IF(section REGEXP '[[:digit:]]+', TRUNCATE((id+NUMERO_TABELLA)*NUMERO_MAX_TABELLE,0), section)AS section In questo caso la generazione del elemento section viene effettuata in modo diverso a seconda che si tratti di un valore di tipo numerico o testuale: il costrutto IF valuta il risultato restituito dalla espressione regolare REGEXP '[[:digit:]]+' che determina se l'elemento originario sia costituito da caratteri numerici, quindi in ultima analisi si tratti di un numero, e si adotti la medesima logica utilizzata per gli altri id, o se invece, l'elemento sia una stringa testuale, magari il nome del componente a cui è associata, e si lasci inalterato il valore. Prima di concludere la spiegazione di questo altro esempio di condivisione, si vuole sottolineare come in questo caso, contrariamente alla condivisione degli utenti, nella installazione di Joomla! che utilizza le viste non siano possibili operazioni di inserimento: i contenuti non potranno essere nè modicati, nè cancellati e tantomeno aggiunti. L'ultimo esempio proposto delinea un tipo di condivisione meno generale di quello degli utenti, ma proprio per la sua particolarità e articolazione, ben si presta a sottolineare come la tecnica di condivisione di informazioni tra installazioni distinte proposta in questa guida sia concettualemente generale ed estendibile a qualsiasi elemento di Joomla!.
|