Parte quinta: plug-in per mastro classiche

Introduzione ai plug-in

Sar-At è, in sostanza, un meccanismo che sposa dinamicamente i contenuti di una base dati con pagine mastro per produrre un sito web. Occasionalmente però il sito web ha bisogno di informazioni che non possono venire stipate nella base dati (per esempio: il valore di una azione in Borsa, con aggiornamento istantaneo) oppure le informazioni della base dati vanno manipolate prima di venire servite nella base dati (per esempio, disegnando una immagine PNG con i risultati di un sondaggio che i visitatori hanno compilato).

Per risolvere questo tipo di problematiche, Sar-At supporta il concetto di plug-in. Analogamente a quanto avviene in altri popolari programmi come per esempio Photoshop, Quark XPress o i browser, un plug-in per Sar-At è un pezzo di codice sviluppato da un programmatore professionista che estende il sistema e le sue capacità.

Se per lo sviluppo del vostro sito vi è necessaria una funzionalità avanzata che non è possibile realizzare altrimenti, contattate il personale tecnico di Accomazzi.net. La documentazione sullo sviluppo di plug-in in linguaggio PHP viene fornita su richiesta, ma Accomazzi.net si riserva il diritto di modificare queste specifiche in qualsiasi momento, per migliorare le prestazioni e le funzionalità del Sar-At.

Sar-At ammette cinque distinti tipi di plug-in: quelli per showPage, quelli Twig, quelli di Vista, quelli di compilazione e quelli di validazione (per i moduli). Il resto di questo capitolo spiega in cosa consistono i plug-in per showPage e presenta i plug-in standard incorporati e forniti di serie con ogni copia di Sar-At. Gli altri plug-in sono presentati nel seguito del manuale.

I plug-in per pagine mastro classiche

I plug-in classici (chiamati anche plug-in di showPage, perché si attivano dall'interno di quel programma) si usano in una pagina mastro esattamente come i campi della sezione corrente. Basta scrivere il nome del plug-in circondato da parentesi graffe.

Il nome dei plug-in è sensibile alla differenza tra lettere minuscole e maiuscole. Se il vostro sito dispone di un plug-in chiamato "esempio" e voi inserite in una pagina mastro il segnaposto {Esempio}, la pagina mastro non verrà correttamente prodotta e visualizzata.

I plug-in disponibili con ogni copia del Sar-At si distinguono in incorporati e standard. I primi vengono sintetizzati dal Sar-At stesso, sono irrinunciabili e non appaiono nell'elenco in prima pagina. I secondi invece sono semplicemente pre-installati e volendo possono venire rimossi o alterati.

Il resto di questo paragrafo presenta i plug-in forniti di serie con Sar-At, insieme a trucchi e consigli di utilizzo.

Per ciascun plug-in standard riportiamo una breve descrizione, seguita da quattro paragrafi. DEFINISCE riporta tutti i segnaposto utilizzabili grazie a quel plug-in. PARAMETRI riporta le informazioni che si possono o debbono passare al plug-in per configurarlo -- tipicamente attraverso un FORM dello HTML. Lo ESEMPIO infine mostra un brano di HTML dove il plug-in viene dimostrato.

Plug-in intestazione

Il plug-in di intestazione {HEAD} non è utile né necessario in HTML5. Continua a funzionare in Sar-At 11 ma l'uso è deprecato. Il codice che genera HEAD verrà rimosso in Sar-At 12.

Plug-in visitatore registrato

Il plug-in va utilizzato per testare se un visitatore va parte di un gruppo di utenti registrati (o autoregistrati, nel caso del commercio elettronico).

Quando il visitatore guarda una pagina riservata, Sar-At richiede e convalida il suo nome utente e la sua password, che un amministratore avrà precedentemente inserito nel sistema usando la schermata Utenti e Gruppi.

Il plug-in incorporato standard {sarel_username} può venire utilizzato per far inserire al Sar-At il nome del visitatore nella pagina mastro, in modo da salutarlo.

L'uso di questo plug-in rende la pagina incompatibile con la cache di Sar-At, e quindi molto meno veloce ad apparire. Questo è inevitabile, perché il nome dell'utente corrente cambia per ogni utente, e quindi ogni copia della pagina inviata a ciascun distinto visitatore è differente…

Definisce

{sarel_userlogged} Vero oppure falso, a secondo che il visitatore corrente sia registrato o meno

{sarel_username} Identificatore univoco del visitatore. Username non modificabile

{sarat_adminlogged} Vero oppure falso, a secondo che il visitatore corrente sia un amministratore

{sarat_adminname} Identificatore univoco dell'amministratore connesso al server

Parametri

Nessuno.

Esempio Html

All'interno di una pagina mastro classica scriviamo:

  {IF sarat_adminlogged}
   informazioni privilegiate
  {ENDIF sarat_adminlogged}

O anche:

  {IF sarel_userlogged}
          Benvenuto, {sarel_username}.
  {ELSE sarel_userlogged}
          Benvenuto, visitatore anonimo
  {ENDIF sarel_userlogged}

Plug-in motore di ricerca incorporato

Il plug-in {search_engine}, permette la realizzazione di un motore di ricerca che lavora su tutte le sezioni del sito. È pienamente personalizzabile dal progettista del sito (che può anche decidere di lasciare che sia il visitatore a selezionare le opzioni di ricerca).

Come sempre, i risultati della ricerca possono venire impaginati visivamente con la massima libertà.

Definisce

Tutti i campi dei record trovati, per nome. Per esempio, {title} è il titolo della pagina trovata e {lastMod} la data dell'ultima modifica.

{search_engine} I risultati della ricerca.

{searchengine_next} URL per la schermata successiva di risultati. Vedi esempi nel prossimo paragrafo

{searchengine_prev} URL per la schermata precedente di risultati. Vedi esempi nel prossimo paragrafo

{searchengine_usenext} Se esiste una schermata precedente di risultati, vale 1, altrimenti vale 0

{searchengine_useprev} Se esiste una schermata precedente di risultati, vale 1, altrimenti vale 0

{searchengine_row} Vale odd nelle righe dispari e even nelle righe pari del risultato. Questo parametro può venire utilizzato per impaginare i risultati utilizzando i Cascading Style Sheet. Vedi sotto per un esempio.

{searchengine_resultsfound} Mostra quante pagine sono state trovate.

{searchengine_fromto} Mostra da quale record a quale record stiamo mostrando nella paginata corrente. Per esempio, se il motore di ricerca ha trovato 51 pagine e se recordsReturned vale 10 e se stiamo guardando la seconda pagina di risultati, allora {searchengine_fromto} vale 11-20.

{searchengine_navigator} Mostra un navigatore interno. Per esempio, se il motore di ricerca ha trovato 51 pagine e se recordsReturned vale 10 e se stiamo guardando la seconda pagina di risultati, allora {searchengine_navigator} produce questo risultato:

123 4 5 6

Il tag {search_engine} si deve trovare dentro la pagina mastro (dei risultati). Tutti gli altri tag devono trovarsi in un documento distinto, chiamato documento ihtml, che contiene le regole di formattazione dei risultati in linguaggio HTML.

Parametri

Nome parametro

Valori accettabili

Spiegazione

search

un testo qualsiasi

Cosa cercare

comparison

equals

differs

contains

gt

lt

gte

lte

fulltext

dev'essere uguale a

dev'essere diverso da

deve contenere

deve essere maggiore

deve essere minore

deve essere maggiore o uguale

deve essere minore o uguale

La ricerca avviene a tutto testo

searchFld1

searchFld2

searchFld3

...

Nome di un campo

primo campo in cui cercare

secondo campo in cui cercare

...

recordsReturned

Numero intero

numero record per pagina da restituire

sortBy

Numero intero

Numero del campo da usare come chiave d'ordinamento

sortOrder

ascending

descending

ordinamento A..Z

ordinamento Z..A

template

Sezione entro la quale effettuare le ricerche

Parametro obbligatorio, ma viene ignorato se è presente il parametro multiSectionSearch

results

Nome di un file di testo con brano HTML dell'interfaccia utente.

Se questo parametro manca, il motore di ricerca si aspetta per default un file chiamato results_searchEngine.ihtml

noresults

Nome di un file di testo con brano HTML da mostrare se nulla viene trovato

Se questo parametro manca e nulla viene trovato appare la scritta La tua ricerca non ha ottenuto alcun risultato / No results found.

multiSectionsSearch[]

Elenco di sezioni nelle quali effettuare la ricerca

Opzionale. Se manca, la ricerca viene effettuata nella sola sezione indicata dal parametro template. Vedi esempio alla fine di questo sottocapitolo.

creation

Un numero positivo

Opzionale. Se presente, il motore di ricerca non mostra pagine più vecchie di questo numero di giorni.

groupby

Il nome di un campo

Opzionale. Se presente, il motore di ricerca raggruppa nei risultati tutti i record che hanno identico valore in questo campo

Se il parametro "multiSectionsSearch" ha un valore, Sar-At cerca in tutti i campi che esistono in tutte le sezioni indicate.

Se il parametro "comparison" ha valore uguale a "fulltext" e se "multiSectionsSearch" non viene passato, search_engine esegue una ricerca a tutto testo (di cui abbiamo parlato nel capitolo 2) sulla sezione indicata dal parametro template.

All'interno del file HTML, si utilizza l'indicazione one_foundpage_block per caratterizzare il blocco di HTML da ripetere per ogni pagina trovata.

Esempio Html

Questo codice HTML realizza un motore di ricerca che va a cercare il testo digitato nel titolo delle pagine della sezione prodotti.

  <form action="showPage.php" method='post'>
          Cerca:<input type='text' name='search' value="" size='12' />
          <input type='submit' value="Trova" />
          <input type='hidden' name='template' value='prodotti' />
          <input type='hidden' name='masterPage' value='foundResult.html' />
          <input type='hidden' name='comparison' value='contains' />
          <input type='hidden' name='searchFld1' value='title' />
          <input type='hidden' name='recordsReturned' value='10' />
          <input type='hidden' name='sortBy' value='4' />
          <input type='hidden' name='sortOrder' value='descending' />
  </FORM>

Questo codice HTML realizza un modulo di ricerca più complesso, dove l'utente può selezionare i parametri richiesti e generare una ricerca complessa:

  <form action="showPage.php" method='post'>
          <input type='hidden' name='template' value='prodotti' />
          <input type='hidden' name='masterPage' value='foundResult.html' />
   
          Cerca i prodotti in cui 
          <select name='searchFld1'>
                 <option selected value='title'>il nome</option>
                 <option value='description'>la scheda</option>
                 <option value='prezzo_lit'>il prezzo</option>
          </select>
          <select name='comparison'>
                 <option selected value='contains'>contiene</option>
                 <option value='equals'>&egrave; uguale a</option>
                 <option value='differs'>&egrave; diverso da</option>
                 <option value='gt'>&egrave; maggiore di</option>
                 <option value='gte'>&egrave; maggiore o uguale a</option>
                 <option value='lt'>&egrave; minore di</option>
                 <option value='lte'>&egrave; minore o uguale a</option>
          </select>
          <input type='text' name='search' value="" size='12' />
   
          <p>Mostra i risultati a gruppi di 
          <select name='recordsReturned'>
                 <option>5</option>
                 <option selected>10</option>
                 <option>25</option>
          </select>
          ordinandoli per 
          <select name='sortBy'>
                 <option selected value='title'>nome</option>
                 <option value='lastMod'>data di aggiornamento</option>
                 <option value='prezzo_lit'>prezzo</option>
          </select>
          in modo
          <select name='sortOrder'
                 <option selected value='ascending'>crescente</option>
                 <option value='descending'>decrescente</option>
          </select></p>
          <p><input type='submit' value="Trova" /></p>
  </form>

Questo è un esempio di un possibile modulo searchEngine.ihtml. Esso visualizza una tabella con i prodotti trovati. Il risultato della ricerca viene piazzato in una vista autodefinita, chiamata one_foundpage_block.

  <table border="1">
          <tr>
                 <th>
                         Nome prodotto
                 </th>
                 <th>
                         Breve descrizione
                 </th>
                 <th>
                         Prezzo
                 </th>
          </tr>
  {BEGIN one_foundpage_block}
          <tr><td align='left'><a href='showPage.php?template=prodotti&id={id}'>{title}</a></td>
          <td align='left'>{description}</td>
          <td align='left'>{prezzo_lit}</td>
          </tr>
  {END one_foundpage_block}
  </table>
   
  <table width='100%'>
  <tr><td>
  <a href="{searchengine_prev}">&lt;-Precedenti</a>
  </td><td>
  <a href="{searchengine_next}">Successivi -&gt;</a>
  </td></tr>
  </table>

Nell'esempio precedente, i link "precedenti" e "successivi" appaiono anche se non esiste pagina precedente o successiva di risultati della ricerca. I link generati dal plug-in in questo caso sono inattivi. Se questo è un problema dal punto di vista estetico è possibile usare codice HTML un poco più complicato, simile a questo:

  <script>
  if ({searchengine_useprev} == 1)
          document.write ("<a href='{searchengine_prev}'>&lt;-precedenti</a>");
  </script>
  <noscript>
          <a href="{searchengine_prev}">&lt;-precedenti</a>
  </noscript>

Ed ecco, infine, un esempio in cui la righe trovate vergono mostrate in colori alternati, grazie all'uso di {searchengine_row}.

Pagina mastro:

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it">
  <head>
          <meta http-equiv="content-type" content="text/html; charset=utf-8" />
          <title>Esempio</title>
          <style type="text/css">
                 td.odd { background-color: white; }
                 td.even { background-color: #E2E2E2; }
          </style>
  </head>
  <body>
          {search_engine}
  </body>
  </html>
   

File results_searchEngine.ihtml

          <table>
                 <tr>
                         <th>
                                Nome prodotto
                         </th>
                         <th>
                                Breve descrizione
                         </th>
                         <th>
                                Prezzo
                         </th>
                 </tr>
          {BEGIN one_foundpage_block}
                 <tr>
                         <td class="{searchengine_row}">
                                <a href="showPage.php?template=x&id={id}">{title}</a>
                         </td>
                         <td class="{searchengine_row}">{description}</td>
                         <td class="{searchengine_row}">{prezzo_lit}</td>
                 </tr>
          {END one_foundpage_block}
          </table>
  </body>

Ecco, infine, un esempio di ricerca su più sezioni contemporaneamente. Si noti che in un caso come questo Sar-At può effettuare ricerche solo all'interno di campi presenti in tutte le sezioni cercate.In altre parole, i campi incorporati Sar-At (title, keywords, description…) sono sempre ricercabili quando multiSectionsSearch è indicato. I campi definiti da voi sono ricercabili se presenti in tutte le sezioni scelte via multiSectionsSearch. Per esempio, se definite una sezione "articoli", una sezione "cronaca" e una sezione "approfondimenti" e se tutte queste sezioni contengono i campi "firma_articolista" e "testo", allora potete usare multiSectionsSearch.

  <form action="showPage.php" method='post'>
          <fieldset><legend><strong>Ricerca avanzatissima</strong></legend>
          <input type='hidden' name='template' value='faq' />
          <!-Per indicare in modo fisso le sezioni su cui ricercare, si usa:
  input type='hidden' name='multiSectionsSearch' value='articoli, faq, news, notizie'
          -->
          <input type='hidden' name='masterPage' value='risultati.html' />
          <input type="hidden" name="results" value="ihtml/results_searchEngine.ihtml" />
          <input type="hidden" name="noresults" value="ihtml/nothing_found.ihtml" />
   
          <!-Per lasciare che sia il visitatore a scegliere le sezioni: -->
          Seleziona le pagine che si trovano nelle sezioni
          <select name='multiSectionsSearch[]' multiple='yes'>
                 <option selected>articoli</option>
                 <option selected>faq</option>
                 <option selected>news</option>
                 <option selected>notizie</option>
          </select>
          <br />
          in cui
          <select name='searchFld[]' multiple='multiple'>     
                 <option selected value='keywords'>le parole chiave</option>
                 <option selected value='title'>i titoli</option>
                 <option value='description'>le descrizioni</option>
          </select>
          <select name='comparison'>      
                 <option selected value='contains'>contengono</option>
                 <option value='starts'>cominciano con</option>
                 <option value='ends'>finiscono con</option>
                 <option value='equals'>sono uguali a</option>
          </select>
          <input type='text' name='search' value="" size='25' />
          
          <p>Mostra i risultati a gruppi di 
          <select name='recordsReturned'>  
                 <option>5</option>
                 <option selected>10</option>
                 <option>15</option>
                 <option>20</option>
                 <option>25</option>
          </select>
          <br />
          ordinandoli per 
          <select name='sortBy'>   
                 <option selected value='title'>titolo</option>
                 <option value='lastMod'>data di aggiornamento</option>
                 <option value='creation'>data di creazione</option>
                 <option value='sarelTemplate'>sezione di appartenenza</option>
          </select>
          in modo
          <select name='sortOrder'
          
          <option selected value='ascending'>crescente</option>
          <option value='ascending'>decrescente</option>
          
          </select></p>
          <p><input type='submit' value="Trova" /></p>
          </fieldset>
  </form>

Plug-in put_flash

Il plug-input_flash, deprecato in Sar-At 10, è rimosso in Sar-At 11.

Plug-in rectangular_view

Il plug-inrectangular_view, deprecato in Sar-At 10, è rimosso in Sar-At 11.

Plug-in hit_counter

Sar-At permette agli amministratori del sito di sapere esattamente quanti visitatori hanno visualizzato una specifica pagina (si veda il manuale "Governare il sito" al capitolo 4, paragrafo 3, "Le statistiche", per una descrizione della funzionalità SarelHitCounter).

Se vi interessa mostrare questa informazione anche ai visitatori potete fare uso del plug-in standard {hit_counter}.

Definisce

{hit_counter}, il numero intero di visitatori della pagina corrente. Vale sempre zero se la funzione SarelHitCounter non è stata abilitata dall'amministratore nella scheda della pagina

Parametri

{hit_counter}, fa sempre capo alla sezione (template) e alla pagina (id) corrente. Quindi l'inserimento di {hit_counter}, in una pagina mastro visualizzata come showPage.php?template=esempio&id=101 provocherà l'apparizione del valore SarelHitCounter visibile nella pagina id 101 della sezione esempio.

Esempio Html

  Sei il visitatore numero {hit_counter} di questa pagina.
   

Plug-in del carrello della spesa

Questo plug-in è utilizzabile soltanto nei siti che fanno uso del carrello della spesa Sar-At (abilitato attraverso la linguetta "Ecommerce" visibile nelle schermate Sar-At).

Immaginate per esempio un visitatore che in un negozio ondine acquista due penne da 4 euro ciascuna e una matita da 3 euro. L'IVA è fissata al ventidue per cento e le spese di spedizione sono impostate al valore fisso di quattro euro a prescindere dal numero di pezzi acquistati. Il visitatore ha digitato un codice coupon che gli dà diritto a uno sconto di un euro se acquista merce per almeno 10 euro.

Definisce

{sarelcart_expense}, il valore totale di tutti gli oggetti presenti nel carrello. Nel nostro esempio, vale 11.00

{sarelcart_num_items} il numero di oggetti nel carrello. Nel nostro esempio, vale 3.

{sarelcart_shipping_handling}, le spese di spedizione. Nel nostro esempio, vale 4.00.

{sarelcart_taxesbeforepromo}, le tasse sulla vendita se non vengono considerati gli sconti. Nel nostro esempio, vale 2,42.

{sarelcart_beforepromo}, il valore totale del carrello prima che vengano applicati gli sconti. Nel nostro esempio, vale 17,42 (che è il valore di sarelcart_expense + sarelcart_shipping_handling + sarelcart_taxesbeforepromo)

{sarelcart_promo} è il valore assoluto dello sconto dopo che sono state applicate tutte le limitazioni del caso. Nel nostro esempio, vale 1.

{sarelcart_promo_percent} è il valore dello sconto come percentuale sul valore della merce. Nel nostro caso, un euro su undici significa uno sconto del 9,09%.

{sarelcart_taxes} sono le tasse sulla vendita dopo aver considerati gli sconti. Nel nostro esempio, vale 2,20 (il 22% di 10 euro).

{sarelcart_grandtotal}, il totale del valore della merce, più le spese di spedizione, più le tasse, meno lo sconto. Nel nostro esempio, vale 16,20 (cioè 10 euro la merce, 4 euro la spedizione, 2,20 le imposte).

Limitazioni

Per il corretto funzionamento del plugin è indispensabile che il tag {sarelcart_expense} sia presente nella pagina e si incontri per primo. Per esempio, non è accettabile scrivere

  Il tuo carrello contiene {sarelcart_num_items} oggetti per un valore totale di {sarelcart_expense} Euro.

Bisogna invece scrivere:

  Il tuo carrello ha un valore di {sarelcart_expense} Euro e contiene {sarelcart_num_items} oggetti.

Il limite può venire aggirato con un uso giudizioso dei commenti HTML. Per esempio:

  <!-Scrivo qui {sarelcart_expense} per soddisfare i requisiti -->
  Il tuo carrello contiene {sarelcart_num_items} oggetti per un valore totale di {sarelcart_expense} Euro.

Plug-in sarelURL

Questo plug-in è utile normalmente soltanto nei siti che fanno uso del carrello della spesa Sar-At (abilitato attraverso la linguetta "Ecommerce" visibile nelle schermate Sar-At), ma funziona con qualsiasi pagina mastro usata attraverso showPage (non va invece usato dentro showForm).

Esso restituisce l'indirizzo URL della pagina corrente.

Definisce

{sarelURL}, l'indirizzo relativo della pagina corrente. Un esempio: showPage.php?template=prodotti&id=101&masterPage=homeProdotti&search=gelati

Plug-in template

Il plug-in {template} si limita a rendere disponibile il nome della sezione corrente. Può essere utile quando usiamo la medesima pagina mastro per due o più sezioni simili tra di loro.

Definisce

{ template} Nome della sezione corrente

Plug-in motore di ricerca rapido

Il plug-in di ricerca rapida, {search_site7} è una soluzione alternativa a search_engine ma molto più veloce e facile da impostare e mettere a regime.

Definisce

{search_site7} si comporta esattamente come {search_engine}, che è stato progettato per rimpiazzare. C'è però una differenza degna di nota. Se il parametro "comparison" ha valore uguale a "fulltext" e se "multiSectionsSearch" non viene passato, search_engine esegue una ricerca a tutto testo (di cui abbiamo parlato nel capitolo 2) sulla sezione indicata dal parametro template mentre invece search_site7 la esegue su tutte le sezioni che hanno definiti i campi per la ricerca a tutto testo.

All'interno di results_searchEngine.ihtml possono venire utilizzati i costrutti IF.

Esempio HTML

Per impostare un motore di ricerca sull'intero sito seguite questa prassi. 1: scegliete tutte le sezioni in cui il motore di ricerca deve lavorare contemporaneamente. Per ciascuna di esse visitare il menu Pagine, e nella linguetta Informazioni cliccate il pulsante "Ricerca a tutto testo". Nella schermata che appare spuntate tutti e soli i campi dentro i quali il motore di ricerca deve guardare.

2. Copiate il codice seguente e incollatelo dentro a un file chiamato results_searchEngine.ihtml:

  Risultati {searchengine_fromto} di {searchengine_resultsfound}
  <ul>
          {BEGIN one_foundpage_block}<li><a href='showPage.php?template={saratTemplate}&id={id}'>{title}</a><br />
          {description}{END one_foundpage_block}
  </ul>
  {searchengine_navigator}

3. Preparate la pagina che deve contenere i risultati della ricerca. Nel punto in cui questi debbono apparire scrivete semplicemente {search_site7}. Al punto 4 immagineremo che questa pagina si chiami risultatiRicerca.html, ma potete chiamarla come preferite.

4. Copiate il codice seguente e inseritelo in tutte le pagine che deve contenere il motore di ricerca:

  <form action='showPage.php' method='get'>
          <input type='hidden' name='template' value='chisiamo' />
          <input type='hidden' name='masterPage' value='risultatiRicerca.html' />
          <input type='text' name='search' class="Stile13" />
          <input type='image' src='home/bottone_off.gif' />
  </form>

Plug-in sarat_stopgap

Quando un visitatore autoregistrato (si veda il manuale "Governare il sito" nella sezione dedicata ai visitatori registrati) inserisce i suoi dati, egli compila un form HTML. Questo modulo viene mostrato a video attraverso l'uso del metodo showForm di Sar-At, come è spiegato in questo manuale nella sezione sui moduli. In sostanza e per esempio, il modulo di autoiscrizione chiamata "autoregistrati" apparirebbe all'indirizzo

showForm.php?template=autoregistrati

Noi, come proprietari del sito, potremo consultare le anagrafiche dei visitatori dall'interno del programma Sar-At. È importante, naturalmente, che nessun altro possa leggere questi dati. Però, se ci pensate bene, vedrete che c'è un rischio. Cosa succede se qualcuno digita l'indirizzo

showPage.php?template=autoregistrati&id=1

showPage.php?template=autoregistrati&id=2

showPage.php?template=autoregistrati&id=3

…e così via?

Per prevenire questo abuso, la soluzione più semplice e classica in Sar-At sta nel visitare dentro Sar-At la sezione autoregistrati, linguetta Struttura, voce "visibile" e indicare Default: No.

Con questo semplice stratagemma noi rendiamo non visibili ai visitatori le registrazioni.

Sar-At tuttavia permette la riregistrazione, ovvero l'auto-aggiornamento dei dati di registrazione da parte dei visitatori. Le pagine delle registrazioni vanno mantenute visibili per consentire ai loro proprietari di accedervi nuovamente e aggiornare i dati che vi sono contenuti. In questi casi è opportuno l'uso del plug-in {sarat_stopgap}

Definisce

{sarat_stopgap}: consente la visione della pagina solo da parte del legittimo proprietario e soltanto nel contesto di showForm, mai con showPage.

Esempio HTML

Inseriremo nella pagina mastro con il modulo di iscrizion, all'inizio del <body>:

  {sarat_stopgap}

Plug-in clouder

Nei blog si è diffusa l'abitudine di pubblicare un riquadro contenente gli argomenti più gettonati. Nel riquadro le parole più popolari appaiono solitamente più in grande, o con un colore differente. Un cloud è pensato per mostrare le keyword del sito, dimensionate per importanza e ipercollegate alle pagine. Nei siti ricchi di contenuto piace molto, perché invita ad esplorare il contenuto ed è molto utile se il contenuto è generato da una comunità

I cloud in circolazione, sostanzialmente, sono di tre tipi. I primi due sono in circolazione dal 2006 circa, mentre il terzo tipo è apparso molto di recente essendo più complesso da gestire e realizzare.

1. Si mostrano alcune keyword a caso, ogni volta diverse

2. Si mostrano tutte e sole le keyword più importanti

3. Si mostrano tutte, però siccome son molte bisogna avere un meccanismo di paginazione

Sar-At ha un plug-in incorporato, Clouder, che realizza e gestisce tutti e tre i tipi di cloud. L'aspetto grafico del cloud è personalizzabile attraverso l'uso dei CSS.

Definisce

{clouder@cloud} inserisce un cloud del primo tipo

{clouder@tag} inserisce un cloud del secondo tipo

{clouder@alpha} inserisce un cloud del terzo tipo

Parametri

{clouder}, fa sempre capo alla sezione (template) corrente. Le parole chiave da listare vengono prese dal campo keywords di tutti i record (pagine).

La versione 10 di Sar-At introduce alcuni parametri ulteriori che possono venire configurati attraverso una riga di codice PHP

Parametro

Scopo

Valore di default

MAX_TAG_IN_CLOUD

Numero di tag nel cloud (casi 1 e 2)

30

SMALLEST_FONT_SIZE

Dimensioni in pixel dei link più piccoli

10

GREATEST_FONT_SIZE

Dimensioni in pixel dei link più grandi

22

Esempio HTML

Esempio di uso dei parametri ulteriori:

  <?php
  define ('MAX_TAG_IN_CLOUD', 20);
  ?>
  {clouder@cloud}

Plug-in network_authentication

Come visto nella parte terza di questo manuale, Sar-At consente il log-in anche attraverso interconnessione con tutti i più diffusi social network. Il plug-in network_authentication è stato scritto per semplificare al massimo la realizzazione di questa interconnessione.

Quando richiamato, provoca l'apparizione dei pulsanti che consentono il log-in attraverso tutti i network abilitati in Sar-At, menu Utilizzatori, per il gruppo indicato.

Definisce

{network_authentication@nome gruppo}, modulo di log-in via social network

Parametri

Nome del gruppo di utenti registrati (come riportato nel menu Utilizzatori di Sar-At) al quale gli utenti vogliono fare log-in.

Esempio Html

  <p>Per lasciare un commento al blog, fai log-in</p>
<form method="post" action="/sarat/cart/loginBuyer.php"> <input name="group" type="hidden" value="commentatori" /> <input name="koURL" type="hidden" value="registrati.html" /> <label for="username">Email</label> <input type="email" name="username" id="username" /> <label for="password">Password</label> <input id="password" type="password" name="password" /> <a href="/dimenticato.html">Hai dimenticato la password? Clicca qui per riaverla</a><br /> <a href="/showForm.php?template=commentatori">Non sei ancora registrato? Registrati!</a></div> <input type="submit" value="Log-in" /> </form> <p>Oppure autenticati con il tuo social network preferito</p> {network_authentication@commentatori}

Plug-in fusi orari

Il plug-in saratTimezonevi permette di gestire un sito che opera in tutto il mondo e vuole mostrare a ogni visitatore l'ora nel suo fuso orario locale.

Immaginate un blog in cui l'autore italiano scrive un post a mezzogiorno del 1 gennaio, poi un commentatore russo aggiunge una osservazione un'ora dopo alle 15:00 ora di Mosca e infine un commentatore di New York aggiunge un ulteriore commento un'ora dopo alle 7:00 del mattino ora locale.

Sar-At, automaticamente, memorizzerà nella sua base dati tutti gli orari normalizzandoli (si veda il manuale Mantenere il sito. Sarebbe però bene che gli orari vengano mostrati in mondo comprensibile ai visitatori, per esempio l'americano vorrà vedere che il post italiano iniziale è delle 5:00 e il commento russo è delle 6:00.

Definisce

{saratTimezone@nome campo di tipo ora}, mostra l'orario nel fuso orario locale.

Limitazioni

È necessario un JavaScript nel browser che ottiene quale sia il fuso locale del visitatore e lo invia al server al momento del login.

Esempio Html

Nel form di login, aggiungere un campo hidden chiamato sarat-VisitorTimeZoneOffset. popolarlo con JavaScript. Qui vediamo un metodo che utilizza la libreria jQuery.

  <form method='post' action='carat/cart/loginBuyer.php'>
   <input id='tz' name='sarat-VisitorTimeZoneOffset' type='hidden' value='0' />
   […]
  <script>
        $(document).ready(function(){
              var visitortime = new Date();
              $('#tz').val(visitortime.getTimezoneOffset());
        });
  </script>

Nei form che accettano in input informazioni di tipo Ora o Data e ora, va inserito un parametro hidden di nome sarat_tz che contiene il nome del campo o dei campi (separati da virgola) da manipolare.

  <form action="showForm.php" method="post">
   Digitare l'ora in cui è stato ritirato il pacco:
   <input type='hidden' name='sarat_tz' value='DataOraRitiro' />
    […]
   

Nelle pagine mastro classiche che mostrano al visitatore un orario, usare il plug-in per convertire l'orario nel fuso del visitatore.

  Il pacchetto è stato ricevuto dal corriere alle
  {saratTimezone@DataOraRitiro}

Plug-in: risposte a domande frequenti

HTML5

I plug-in di Sar-At che generano codice sono compatibili HTML5?

Sì. Tutto il codice generato da Sar-At (per esempio, attraverso l'uso di plug-in) e inserito nelle pagine web è compatibile con lo standard XHTML e con HTML5.

Per semplicità, scorrevolezza e rispetto della consuetudine, questo manuale fa continuamente uso del termine "linguaggio HTML".