.net CMS
Sviluppatori > I primitivi

SubSite

Essendo questo un gestionale web multi dominio, alla radice di tutto troviamo la classe SubSite definita nel modulo SubSiteManager, generalmente instanziata con il nome di Setting, quindi da qui in poi ogni qualvolta ci si riferisce a Setting ovvero settaggi a livello di sito e sotto-sito, si allude ai parametri di configurazione definiti nella classe SubSite.
Per ogni dominio gestito dall’applicativo se non viene preposto alla semplice funzione di redirect 301, deve corrispondere almeno un Setting (settaggio definito dalla classe SubSite), nel caso corrispondano più Setting, vorrà a dire che per quel determinato dominio corrisponderanno più siti web, ognuno chiaramente potrà avere grafica e caratteristiche differenti proprio in base a quanto definito dal Setting corrispondente. Sotto lo stesso dominio è possibile anche avere un sito con più lingue differenti, anche in questo caso per ogni lingua dovrà corrispondere un singolo Setting che si differirà prevalentemente solo per la lingua impostata e il forum selezionato (se necessario), lasciando invariato il template e tutti glia altri attributi che si vogliono lasciare identici in tutte le lingue.
Ora stabilito che per ogni dominio corrispondono uno o più settaggi, vediamo come intervenire manualmente per creare o modificare il gruppo dei settaggi associato al dominio.
Nella directory “Domains” sotto “App_Data” troviamo una cartella per ogni nome di dominio gestito dall’applicativo web, ed il nome della cartella corrisponde al nome del dominio gestito. Entrando nella cartella relativa al dominio troviamo i file “Redirect.txt”, “SubSite.txt” e “NoSubSite.txt” (questi file in caso d’assenza possono anche essere creati). Il file Redirect.txt può contenere una singola riga nella quale è possibile nominare il nome di dominio (senza [http://www.] , su cui effettuare il redirect 301. Il file “SubSite.txt” è quello che contiene il gruppo di SubSite configurati per questo dominio, uno per ogni riga.
Se per esempio ad un ipotetico dominio “miodominio.com” corrispondono due sottositi in lingue differenti, allora ci dovranno essere due settaggi differenti associati a questo dominio, per esempio “MioBlogItaliano” e “MioBlogInglese”, quindi nel file “SubSite.txt” posto nella directory “App_Data\Domains\miodominio.com” vi saranno due righe contenenti le seguenti nomi: “MioBlogItaliano” e “MioBlogInglese”.
Il file “NoSubSite.txt” tiene una lista di settaggi da escludere dal dominio, questo file può tranquillamente essere vuoto, in automatico verranno associate al dominio solo i settaggi nella lista definita con il file “SubSite.txt”.
Ma dove viene fisicamente salvato il settaggio corrispondente alla classe SubSite? Naturalmente nella directory “App_Data\SubSites” in formato XML. Per ogni settaggio corrisponde un distinto file XML, il cui nome corrisponde al nome del settaggio più il suffisso “.xml” che va a formare l’estensione del nome del file.
Chiarito dove fisicamente sono collocati i file di settaggio, precisiamo anche che non vi è alcuna necessità di intervenire direttamente su questo tipo di file per modificare i parametri di settaggio: I settaggi dei vari SubSite possono essere editati online dalla pagine “setup.aspx”. L’accesso alla pagina di settaggio è interdetto a tutti gli utenti che hanno un ruolo inferiore a Webmaster per il settaggio che si intende editare, chi ha accesso a questa pagina troverà inoltre l’apposito pulsante “Configurazione” nella barra utente che apparirà sul sito.
Tutto questo discorso per dire ciò che si poteva dire in quattro parole, ovvero che ogni sito o sottosito ha un suo file di settaggio, ma che cosa glie ne viene allo sviluppatore di tutto ciò? In pratica, dove sta l’utilità d’avere più Setting?
Per rispondere a questo quesito, occorre innanzitutto chiarire quali siano le proprietà che espone la classe SubSite, accenniamo quindi velocemente alle più importanti: In nome univoco, la lingua, la skin utilizzata (il template), la lista di forum associati al settaggio, la lista degli album fotografici, la lista degli archivi con gli articoli, la lista delle zone meteo da visualizzare nella home page, il formato dell’ora e il formato della data scelto, e tutte quelle impostazioni che caratterizzano e vanno a formare l’intero aspetto del sito o sottosito che utilizzerà il settaggio. Il concetto che potrebbe essere di non facile lettura, dal lato pratico è abbastanza semplice. Vediamo quindi con un esempio di rendere una idea di come deve essere utilizzato il file di settaggio dal lato dello sviluppatore:
Ammettiamo che lo sviluppatore sia intento alla realizzazione di un plugin, la cui pagina di riferimento è “MioPlugin.aspx” e quindi il file di codice sarà “MioPlugin.aspx.vb”.
Nel file di codice, all’interno della relativa classe, occorrerà dichiarare la variabile di settaggio in questo modo:

Private Setting As SubSite

Fatto ciò, per far si che Setting assuma un valore all’atto del caricamento della pagina, occorrerà scrivere dentro il blocco inerente all’evento page_load, la seguente istruzione:

Setting = CurrentSetting()

In questo modo quando un utente (navigatore) accederà alla pagina del plugin, Setting assumerà automaticamente il valore di settaggio del sito o sottosito visitato dal navigatore. Lo sviluppatore quindi non dovrà preoccuparsi di nulla, per lui sarà assolutamente irrilevante su quale sito stia navigando l’utente, perché utilizzando gli attributi esposti da Setting al visitatore verranno sempre mostrati contenuti idonei per la pagina visualizzata.
Poniamo l’esempio di voler mostrare nella pagina, una frase di benvenuto: Essendo questo un applicativo web multi lingua, il messaggio di benvenuto dovrà essere localizzato nella lingua del sito o sottosito visitato dal navigatore. La proprietà Setting.Language ci dice appunto in che  lingua è la pagina visitata dal navigatore, quindi possiamo creare un discrezionale che imposta correttamente la frase di benvenuto in questo modo:

Select Case Setting.Language
  Case Language.Italian
    Label1.Text = "Benvenuto"
  Case Language.Russian
    Label1.Text = "Добро пожаловать"
  Case Language.English
    Label1.Text = "Welcome"
End Select

In realtà non sarà necessario scrivere il pappardello sopra esposto per impostare un messaggio di benvenuto con il discrezionale della lingua del sito in cui il navigatore sta accedendo, possiamo farlo benissimo usando una sola linea di comando in questo modo:

Label1.Text = Phrase(Setting.Language, 35)

Nell’esempio sopra, la funzione Phrase restituisce la frase con indice 35 del PhraseBooks generale (quello standard), nella lingua specificata dal parametro Language. Semplice no!

Sempre rimanendo nel campo degli esempi pratici, supponiamo di dover inserire la data odierna in un etichetta nella pagina. A questo punto c’è da porsi il problema se – per esempio – il formato nella sequenza mese, giorno e anno con 2 cifre separati dal trattino sia quello più idoneo, magari l’utenza di un determinato sottosito in lingua italiana, privilegerebbe il formato giorno, mese, anno di 4 cifre separati dalla barra. Ecco che anche in questo caso, Setting ci viene in contro! Guardate questi esempi:

Label.Text = Date.Today.ToString

L’esempio sopra imposta il testo nell’etichetta con la data odierna nel formato utilizzato dal computer in cui gira l’applicativo web.

Label.Text = Date.Today.ToString(Setting.DateFormat)

Questo esempio invece, imposta – giustamente – la data odierna nell’etichetta usando il formato idoneo per il sito o sottosito visualizzato.
Detto questo, non ci resta che ribadire quanto sia importante per lo sviluppatore l’impiego di questo primitivo, che viene utilizzato frequentemente anche dai vari componenti generati dinamicamente dall’applicativo, stesso ragion per cui molte funzioni hanno tra i propri parametri, Setting as SubSite, o una delle proprietà esposte da questa classe, si tratta di funzioni che elaborano i propri risultati in base al settaggio del sito visualizzato. Tutte le funzioni che generano controlli inseribili nelle pagine dal contenuto graficamente e testualmente differenti in base alla lingua o alla skin del sito visitato, utilizzano come parametro un istanza di SubSite per generare il risultato più idoneo in base al settaggio della pagina visualizzata, tale settaggio si richiama con la funzione CurrentSetting().
Al fine di non infierire sulle performance, è buona norma chiamare la funzione CurrentSetting() una sola volta per visualizzazione di pagina (si può fare nell’evento Page Load), assegnando il suo risultato ad una variabile che per convenzione avrà il nome Setting, in seguito all’occorrenza si farò riferimento alla variabile Setting e non più alla funzione CurrentSetting().
Comunque sia, con il fine di rendere facile la vita agli sviluppatori, l’applicativo viene distribuito con una base di codice esemplificativo per la realizzazione di Plugin, che essenzialmente consiste nei due file “balnk.aspx” e “blank.aspx.vb”, tali file possono essere rinominati o copiati per poi essere impiegati per la realizzazione di Plugin, al loro interno contengono già quella parte di codice che è buona norma utilizzare e costituiscono una base su cui partire per la realizzazione di aggiunte personalizzate.

Argomenti nella stessa categoria