Parte seconda: le viste

Creando una vista, noi possiamo estrarre un elenco di dati depositati dentro al nostro sistema. Se preferite, potete considerarla come un punto di vista (da cui il nome), o una selezione di dati. Se abbiamo un catalogo di cinquemila prodotti, per esempio, possiamo creare una vista sui prodotti che costano meno di dieci Euro, e inserirla in una pagina web. Anche quando l'assortimento di prodotti a catalogo o il prezzo di listino cambiano noi non dobbiamo preoccuparci: quella pagina mostrerà sempre e soltanto i prodotti che in un dato istante costano meno di dieci Euro.

Il criterio di inclusione in una vista può essere semplicissimo, come nell'esempio poco sopra, o più complicato. Possiamo chiedere di inserire in una vista tutte le pagine modificate nell'ultimo mese, oppure le schede del personale il cui cognome comincia con le lettere A-L, oppure gli articoli il cui titolo contiene la parola "novità".

Se il nostro catalogo a stampa contiene una sezione "ultime notizie", possiamo creare una vista che le include tutte e ci siamo così procurati un efficiente indice dell'intera sezione.

Una vista è una regola di selezione, che noi definiamo e a cui diamo un nome. Per esempio, la vista «prodotti che costano meno di dieci Euro» ci cui parlavamo sopra. Sar-At registra la vista e la utilizza (esegue la selezione) quando la trova riferita dentro una pagina mastro.

Sar-At consente la creazione delle Viste in tre modalità; semplificata, completa e per esperti.

Modalità semplificata

Per creare una vista in modalità semplificata noi clicchiamo la linguetta "Viste" in alto, premiamo il pulsante "Aggiungi vista" e compiliamo il modulo che appare.

In alto dobbiamo specificare il nome della vista (possiamo scrivere qualsiasi cosa - si tratta in effetti di un commento, un promemoria, che Sar-At registrerà a nostro vantaggio ma che non utilizzerà). Di seguito scriviamo la etichetta della vista. In questo caso, invece, si tratta di una singola parola (deve contenere soltanto lettere, numeri e il carattere =_").

La etichetta della Vista verrà usata per chiedere al Sar-At di eseguire la selezione. Ogni volta che Sar-At trova l'etichetta dentro una pagina mastro del nostro sito web, la selezione viene eseguita e il risultato appare nella pagina, formattato in HTML.

Selezione e filtro

Nel modulo di definizione delle viste semplificate troviamo le regole di selezione e filtro. Questo è il riquadro più importante da compilare.

Il caso più semplice e più comune è il primo: la Vista non è filtrata. In questo caso, Sar-At restituisce tutti gli elementi della sezione. Per esempio, se vogliamo creare un indice dei nostri prodotti allora creiamo una vista non filtrata che restituisce un elenco di tutti i record (tutte le pagine) della sezione "prodotti".

La voce "verranno presentate contemporaneamente informazioni da non più di … record" in questo caso va lasciata in bianco oppure (è lo stesso) va scritto il numero zero, che Sar-At in questo caso prende nel senso di "nessun limite".

Immaginiamo di voler trovare solo i prodotti che costano meno di dieci Euro. In questo caso selezioneremo il pulsante Filtra e mostra solo i record in cui il prezzo è inferiore a. Subito sotto, selezioneremo il pulsante il valore e digiteremo "10"

Le opzioni numero caratteristico del record corrente e un valore scelto dal visitatore si usano in casi speciali, che presentiamo nel seguito di questo capitolo: le relazioni e i motori di ricerca, rispettivamente.

Ordinamento nelle viste

Le viste restituiscono i loro risultati in un ordine specificato da noi.

Questo riquadro è piuttosto intuitivo e non richiede particolari spiegazioni. Vediamo piuttosto qualche esempio pratico di Viste reali.

Alcuni semplici esempi di Viste

In questo paragrafo immaginiamo di aver creato una sezione "catalogo prodotti" e di voler preparare un indice, per la home page, usando le Viste di Sar-At. Presentiamo qui tre casi molto frequenti: si veda oltre il paragrafo "le viste: uso avanzato" per altri esempi.

Per creare un elenco alfabetico di tutti i prodotti

La vista non è filtrata e mostra tutti i record della sezione "prodotti". Verranno presentate contemporaneamente informazioni da non più di 0 record. Mostra i record ordinati per title. Presenta i risultati in ordine ascendente A-Z

La opzione verranno presentate contemporaneamente informazioni da… in questo caso va lasciata in bianco oppure (è lo stesso) va scritto il numero zero, che Sar-At prende nel senso di "nessun limite".

Per creare un elenco di tutti i prodotti per data di presentazione

La vista non è filtrata e mostra tutti i record della sezione "prodotti". Verranno presentate contemporaneamente informazioni da non più di 0 record. Mostra i record ordinati per creation. Presenta i risultati in ordine discendente dic-gen

Un caso analogo al precedente, ma qui usiamo l'ordinamento discendente (da dicembre a gennaio, cioè i più recenti per primi). Ordinando per data di creazione mostriamo per primi i record (le pagine) inserite più di recente. Se invece ordinassimo per data di aggiornamento allora apparirebbero per primi i record (le pagine) che abbiamo ritoccato poco tempo fa.

Per creare un elenco dei cinque prodotti più nuovi

La vista non è filtrata e mostra tutti i record della sezione "prodotti". Verranno presentate contemporaneamente informazioni da non più di 5 record. Mostra i record ordinati per creation. Presenta i risultati in ordine discendente dic-gen

Un caso identico al precedente, ma qui mettiamo all'opera l'opzione "verranno presentate contemporaneamente informazioni da…"

Viste complete

Sar-At offre poi una seconda modalità per creare le viste, molto più potente della modalità semplificata che abbiamo usato sin qui. È la modalità completa. Potete sempre trasformare una Vista creata in modalità semplificata in una Vista completa e continuare ad editarla, mentre il contrario non è possibile.

Per creare una nuova Vista in modalità completa, o per convertire una Vista semplificata a questa modalità, selezionate Completa dal selettore a tre stati in alto.

Rispetto a quanto abbiamo visto in precedenza la a cambiare "selezione e filtro" potete ora inserire una lunga serie di condizioni. Per esempio, potete selezionare all'interno del vostro catalogo di libri tutti quelli ancora in catalogo, dal prezzo superiore a dieci euro, scritti in italiano e il cui editore è Apogeo.

Usare il pulsante + per aggiungere una condizione. Quando l'avete aggiunta, usate il pulsante √ per confermarla e aggiungerla alla lista delle condizioni in uso, oppure il pulsante ø se ci avete ripensato e preferite non aggiungerla. Se avete già aggiunto una condizione all'elenco e volete eliminarla, cliccate il pulsante - alla sua sinistra.

Condizioni AND

Le condizioni vengono normalmente concatenate con la modalità chiamata AND, ovvero un record deve rispettare tutte le condizioni per essere selezionato. Per esempio, se io compilo una Vista come nella figura sopra, allora verranno selezionati e mostrati sul vostro sito solamente i libri di Mondadori sopra i dieci euro. Un libro Mondadori da 9 euro e un libro Einaudi da 15 euro non appariranno.

Condizioni OR

Cliccando il pulsante radio "OR" mentre digito una condizione la aggiungerò come alternativa alle condizioni precedenti. Per esempio potrò selezionare una attrice bionda oppure rossa di capelli.

Priorità degli operatori

AND viene eseguito prima di OR. Per esempio, una Vista che dice:

  Verranno selezionati dalla tabella cantanti solo i record per cui
  Timbro è Tenore
  AND Nazione è Italia
  OR Timbro è Soprano
  AND Nazione è Spagna

Selezionerà sia i tenori italiani che le soprano spagnole, ma non selezionerà i tenori spagnoli e le soprano italiane. Se l'ordine degli operatori da voi desiderato è differente, convertite la Vista in modalità per esperti e aggiungete le parentesi. Per esempio,

  Timbro è Tenore
  OR Timbro è Soprano
  AND Nazione è Spagna

Trova tutte le soprano spagnole e anche tutti i tenori di qualsiasi nazionalità. Se vi interessa trovare tenori e soprano spagnoli, convertite la Vista in modalità per esperti e vedrete apparire

  Timbro = 'Tenore' OR Timbro='Soprano' AND nazione='Spagna'

Modificate così;

  (Timbro = 'Tenore' OR Timbro='Soprano') AND nazione='Spagna'

Viste per esperti

Sar-At consente la creazione di Viste ad hoc in modalità avanzata. In altre parole, un programmatore che conosca il linguaggio standard per le basi dati, SQL, può scrivere a mano la istruzione (o "query") che Sar-At eseguirà per selezionare i record oggetto della Vista. Per attivare la modalità avanzata, nella schermata delle Viste si seleziona l'opzione "avanzata" nel menu a scomparsa.

Sar-At non consente editing "al vivo" delle viste avanzate. In altre parole, non apparirà la matitina che consente di editare il contenuto dei campi direttamente all'interno della pagina web.

Sar-At effettua una verifica sommaria della sintassi di una Vista avanzata e non vi permette di registrare una Vista non funzionale.

Viste per esperti e variabili predefinite

Sar-At definisce alcune variabili di ambiente in linguaggio SQL che sono utilizzabili da tutte le viste ad hoc. Sono documentate nella tabella sottostante. Gli esempi che faremo da qui in poi suppongono che la Vista venga invocata all'interno di una pagina richiamata come

showPage.php?template=turismo&id=101&masterPage=mastro.html&search=Madrid&anno=1980

immaginiamo anche che il record 101 della tabella esempio corrisponda a una pagina di lingua spagnola, intitolata "España". La lingua spagnola, codifica ISO, in Sar-At è codificata con il numero 1004 (l'elenco completo dei codici di lingua si trova nel manuale Mantenere il sito).

Variabile

Valore

@id

Lo id del record corrente. Nel caso dell'esempio la variabile varrà 101. Per i form, quindi quando il programma corrente è showForm, non ha alcun valore.

@sarelLanguage

Il codice numerico della lingua della pagina. È un numero intero che nel caso dell'esempio vale 1004. Per i moduli, quindi quando il programma corrente è showForm, è il codice dell'ultima lingua usata nell'ultima pagina vista con showPage in precedenza.

@saratLanguage

Il codice ISO della lingua della pagina, composto da due lettere. Nel caso dell'esempio vale "es". Per i moduli, quindi quando il programma corrente è showForm, è il codice dell'ultima lingua usata nell'ultima pagina vista con showPage in precedenza

@masterPage

Il nome della pagina mastro chiamata a vestire di grafica questi dati. Nel caso dell'esempio, vale "mastro.html"

@template

Il nome della sezione corrente. Nel caso dell'esempio vale "turismo"

@saratPremium

La pagina è riservata ai visitatori registrati o di libero accesso anche ai visitatori anonimi? Nel secondo caso questa variabile, che è sempre un numero intero, vale zero. Per i moduli vale normalmente zero

@visible

Un singolo carattere, che vale Y o N. Indica se la pagina è visibile (Y) o nascosta e irraggiungibile (N) sul web

@sarel_userlogged

Se il visitatore ha inserito una username e una password, vale 1.

@sarel_username

Se il visitatore ha inserito una username e una password, vale come la sua username. Altrimenti è una stringa univoca di circa trenta caratteri che lo identifica a livello cookie.

@sarat_adminlogged

Se la pagina viene visualizzata da un amministratore Sar-At che ha inserito username e password, vale 1.

@sarat_adminname

Se la pagina viene visualizzata da un amministratore Sar-At che ha inserito username e password, vale come la sua username. Altrimenti è vuota

@saratMobile

Se la pagina appare su dispositivo a piccolo schermo vale 1, altrimenti vale 0

Variabili provenienti dal record corrente

Tutti i campi del record corrente - dia quelli che avere definito voi sia quelli incorporati - sono variabili predefinite. Per esempio, immaginate di aver realizzato il sito dei cantanti lirici, come mostrato a pagina 7 del manuale. Immaginate anche di aver richiamato nel browser la scheda del tenore Amilcare Pallazzi, digitando l'indirizzo

  showPage.php?template=cantanti&id=1

In questo caso, nelle vostre viste SQL risultano automaticamente definite e inizializzate le seguenti variabili: @timbro con valore Tenore, @nazione con valore Italia, @masterId con valore 1. Eccetera.

Vi è dunque molto semplice inserire nella pagina "Amilcare Pallazzi" un elenco "altri tenori" o un elenco "altri cantanti lirici provenienti dall'Italia". Per trovare gli altri cantanti italiani infatti vi basta una Vista come questa:

  SELECT * FROM cantanti WHERE timbro=@timbro

E per gli altri italiani:

  SELECT * FROM cantanti WHERE nazione=@nazione

L'uso delle variabili predefinite è compatibile con la cache che Sar-At gestisce per le pagine mastro classiche.

Variabili provenienti dalla URL

Tutti i parametri della URL corrente sono variabili predefinite. Nel caso dell'esempio risultano automaticamente definite e inizializzate le seguenti variabili: @anno con valore 1980, @search con valore Madrid.

Poiché aggiungere parametri alla URL è facilissimo (e si può anche spedirne da un modulo HTML), le variabili passate via URL vi permettono di costruire con grande semplicità motori di ricerca arbitrariamente complicati. Per esempio, dentro la pagina indicata potreste mostrare un elenco di tutti i cantanti nati nel 1980.

  SELECT * FROM cantanti WHERE YEAR(data_nascita)=@anno

Attenzione! L'uso delle variabili URL automaticamente e inevitabilmente rende impossibile il meccanismo della cache di Sar-At per pagine mastro classiche. La produzione della pagina dunque risulta dieci volte più lenta di quanto accadrebbe per una pagina in cui la cache è attiva.

Viste per esperti, pagine mastro classiche e cache

Una pagina che contiene una vista standard e viene usata in una pagina mastro classica può sempre finire nella cache di Sar-At, e quindi venire servita ai visitatori del sito in tutta velocità. Le viste ad hoc, cioè quelle scritte a mano in linguaggio SQL, potrebbero risultare incompatibili con la cache delle pagina mastro classiche. Facciamo un esempio per capire dove sta il problema. Avete definito una sezione "banner" e l'avete riempita di inserzioni pubblicitarie che debbono apparire a rotazione in tutte le pagine del vostro sito. Avete poi scritto una Vista ad hoc che ha lo scopo di pescare un banner a caso tra tutti quelli disponibili. Se Sar-At mettesse nella sua cache le vostre pagine web, succederebbe che quando il primo visitatore naviga su una pagina allora la vostra Vista viene eseguita e pesca casualmente il banner dell'inserzionista Pinco Pallino. La pagina così prodotta viene poi salvata nella memoria cache e inviata in velocità a tutti i visitatori susseguenti. Questo comportamento però a voi non sta bene, perché voi desiderate che tutti gli inserzionisti vengano ugualmente rappresentati e non appaia il solo Pinco Pallino. Per questo motivo, quando una pagina mastro classica contiene una vista ad hoc, Sar-At prudenzialmente la esclude dal sistema cache e quindi la rigenera ogni volta che un visitatore ci capita sopra.

Per una descrizione della cache di Sar-At si veda il manuale Governare il sito, capitolo primo, sotto a Prestazioni.

Quando si definisce una vista ad hoc, Sar-At permette al programmatore SQL di specificare se la Vista va ritenuta compatibile con la cache o meno. Vanno definite non compatibili tutte le viste che non estraggono sistematicamente alcuni record identificati per numero caratteristico (id). In sostanza, quando Sar-At genera una pagina web si segna quali record concorrono a formarla. Per esempio, in un sito di ricette, la pagina con la ricetta della torta di mele potrebbe dipendere solo dal record numero 1 della sezione ricette (che contiene appunto le istruzioni per cucinare una torta di mele). Se noi impaginiamo su un lato anche un indice di tutte le ricette dei dolci, Sar-At si appunta tutti gli id di tutte le ricette: in questo modo se noi cambiamo il nome del "tiramisù" in "tiramisu" (senza l'accento) Sar-At può riconoscere la necessità di rigenerare la pagina della torta di mele.

Le Viste ad hoc possono risultare non compatibili con la cache quando sfuggono a questa logica. Per esempio: è incompatibile una vista che non seleziona il campo id (SELECT campo1, campo2 FROM sezione non va bene); è incompatibile una vista che seleziona informazioni da due o più sezioni contemporaneamente (JOIN); è incompatibile una vista ad hoc che seleziona sulla base di informazioni che cambiano in continuazione, come l'ora corrente (SELECT NOW() AS adesso).

Il codice HTML nella pagina mastro

Come dicevamo, Sar-At registra le nostre impostazioni nella sua base dati e le esegue tutte le volte che trova l'etichetta della Vista in una pagina mastro. La definizione della Vista decide quali e quanti record appariranno nel contesto della pagina mastro. Ma come decidiamo cosa deve apparire in grassetto e cosa in corsivo? E come stabiliamo se, di ogni record, deve apparire solo il titolo oppure tutte le informazioni (i campi) che abbiamo a disposizione in base dati? Tutto questo avviene durante la compilazione della pagina mastro, ma ci sono differenze importanti a seconda che quest'ultima si stata scritta in linguaggio Twig o in modalità classica.

Per i nostri esempi da qui in poi immagineremo di avere a disposizione una tabella chiamata "prodotti" che contiene tre oggetti:

Viste nelle pagine mastro classiche

Il richiamo di una vista in una pagina mastro classica di fa usando la sintassi {BEGIN etichetta}…{END etichetta}. Tutto ciò che si trova tra BEGIN ed END viene ripetuto una volta per ogni record trovato.

Elenco semplice

Per avere un elenco di tutti i prodotti nella mia pagina home io scrivo:

  {BEGIN elenco_prodotti}
  {title}<br />
  {END elenco_prodotti}

Il risultato HTML (che viene inviato al visitatore) sarà:

  Biscotti al cioccolato<br />
  Torta al cioccolato<br />
  Yogurt al cioccolato<br />

Il risultato a video sarà semplicemente:

Biscotti al cioccolato

Torta al cioccolato

Yogurt al cioccolato

Link alle pagine interne

Immaginiamo che di ciascun prodotto esiste una ampia descrizione. Vogliamo allora che, quando il visitatore clicca il nome del prodotto, venga mandato alla scheda del prodotto. Se abbiamo impostato correttamente le cose, il nostro sito avrà una "cartella magica" SEO usata per le URL amichevole (si veda la spiegazione nel capitolo precedente) e la scheda del prodotto "Yogurt al cioccolato" avrà un indirizzo registrato nel campo automatico saratUrl quindi sarà accessibile a un indirizzo del tipo www.nomesito.it/nome-cartella-magica/yogurt-cioccolato-1234567.html

Per avere un elenco linkato nella mia pagina home io scrivo:

  {BEGIN elenco_prodotti}
          <a href='/nome-cartella-magica/{saratUrl}'>{title}</a>
  {END elenco_prodotti}

Il risultato HTML (che viene inviato al visitatore) sarà simile a questo:

  <a href='/nome-cartella-magica/yogurt-cioccolato-1234567'>
          Yogurt al cioccolato
  </a>
  <a href='/nome-cartella-magica/yogurt-cioccolato-1234568'>
          Biscotti al cioccolato
  </a> <a href='/nome-cartella-magica/yogurt-cioccolato-1234569'>
          Torta al cioccolato
  </a>

Se le URL amichevoli non sono state accese sul vostro sito bisogna ricorrere all'indirizzo diretto showPage, quindi useremo

  {BEGIN elenco_prodotti}
          <a href='showPage,php?template=prodotti&amp;id={id}'>{title}</a>
  {END elenco_prodotti}

Elenco numerato programmaticamente

Sar-At offre all'interno di tutte le Viste create nelle pagine mastro classiche il tag saratviews_serial, che possiamo usare per creare un elenco numerato senza fare affidamento all'HTML (per esempio, quando bisogna produrre uno XML, oppure quando vogliamo creare i numeri in grafica, oppure dentro le viste navigabili.

Il seguente esempio mostra una vista navigabile, usata per presentare i prodotti a dieci per volta, ciascuna con il numero alla sinistra. Quando il visitatore clicca per vedere la seconda sottopagina (prodotti da 11 a 20), la numerazione è corretta

  {NAVIGATE dieci_prodotti_alla_volta}
          <div class="numerato">
                 {saratviews_serial}
          </div>
          <div class="collegamento">
                 <a href="/nome-cartella-magica/{saratUrl}">{title}</a>
          </div>
  {END dieci_prodotti_alla_volta}

In tabella per righe a colore alternato

Sar-At riconosce la necessità di creare tabelle visivamente aggraziate e leggibili usando il meccanismo delle Viste. Per questo motivo Sar-At definisce automaticamente in tutte le pagine mastro classiche uno pseudo-campo chiamato sarelviews_row e gli assegna alternativamente il valore "odd" e "even" (rispettivamente nelle righe dispari e pari). In combinazione con un semplice foglio stile, questo permette di ottenere righe a sfondo alternato.

  <style type="text/css">
          td.odd { background-color: #CCFFFF; }
          td.even { background-color: #0099FF; }
  </style>
  <table border='1'>
  {BEGIN elenco_prodotti}
          <tr>
                 <td class='{sarelviews_row}'>
                         {title}
                 </td>
                 <td class='{sarelviews_row}'>
                         {prezzo}
                 </td>
          </tr>
  {END elenco_prodotti}
  </table>

Il risultato HTML (che viene inviato al browser) sarà:

  <table border='1'>
          <tr>
                 <td class='odd'>Biscotti al cioccolato</td>
                 <td class='odd'>10</td>
          </tr>
          <tr>
                 <td class='even'>Torta al cioccolato</td>
                 <td class='even'>25</td>
          </tr>
          <tr>
                 <td class='odd'>Yogurt al cioccolato</td>
                 <td class='odd'>1.75</td>
          </tr>
  </table>

Il risultato a video sarà:

Biscotti al cioccolato

10

Torta al cioccolato

25

Yogurt al cioccolato

1.75

Viste nelle pagine mastro Twig

Per Twig ogni Vista inclusa nella pagina diventa un vettore, compilato da Sar-At con tutti i record trovati nella base dati eseguendo la Vista.

Elenco semplice

Per avere un elenco di tutti i prodotti nella mia pagina home io scrivo:

  {% for unProdotto in elenco_prodotti %}
  {{ unProdotto.title }}<br />
  {% endfor %}

Il risultato HTML (che viene inviato al visitatore) sarà:

  Biscotti al cioccolato<br />
  Torta al cioccolato<br />
  Yogurt al cioccolato<br />

Il risultato a video sarà semplicemente:

Biscotti al cioccolato

Torta al cioccolato

Yogurt al cioccolato

Link alle pagine interne

Immaginiamo che di ciascun prodotto esiste una ampia descrizione. Vogliamo allora che, quando il visitatore clicca il nome del prodotto, venga mandato alla scheda del prodotto. Se abbiamo impostato correttamente le cose, il nostro sito avrà una "cartella magica" SEO usata per le URL amichevole (si veda la spiegazione nel capitolo precedente) e la scheda del prodotto "Yogurt al cioccolato" avrà un indirizzo registrato nel campo automatico saratUrl quindi sarà accessibile a un indirizzo del tipo www.nomesito.it/nome-cartella-magica/yogurt-cioccolato-1234567.html

Per avere un elenco linkato nella mia pagina home io scrivo:

  {% for unProdotto in elenco_prodotti %}
          <a href='/nome-cartella-magica/{{ unProdotto.saratUrl }}'>
                 {{ unProdotto.title }}
          </a>
  {% endfor %}

Il risultato HTML (che viene inviato al visitatore) sarà simile a questo:

  <a href='/nome-cartella-magica/yogurt-cioccolato-1234567'>
          Yogurt al cioccolato
  </a>
  <a href='/nome-cartella-magica/yogurt-cioccolato-1234568'>
          Biscotti al cioccolato
  </a> <a href='/nome-cartella-magica/yogurt-cioccolato-1234569'>
          Torta al cioccolato
  </a>

Se le URL amichevoli non sono state accese sul vostro sito bisogna ricorrere all'indirizzo diretto showTwig, quindi useremo

  {% for unProdotto in elenco_prodotti %}
          <a href='showTwig.php?template=prodotti&amp;id={{ unProdotto.id }}'>
                 {{ unProdotto.title }}
          </a>
  {% endfor %}

Elenco numerato programmaticamente

Il tag saratviews_serial presentato in precedenza non esiste sotto Twig, né ce n'è alcun bisogno. Il numero di prodotti trovati dalla vista del nostro esempio è facilmente disponibile come {{ elenco_prodotti | length }}.

Se vogliamo presentare solo i prodotti da 11 a 20 scriveremo:

  {% for numero, unProdotto in elenco_prodotti %}
          {%if numero > 10 and numero < 21 %}
                 {{ numero }}. {{ unProdotto.title }}<br />
          {% endif %}
  {% endfor %}

In tabella per righe a colore alternato

Il tag sarelviews_row presentato in precedenza non esiste sotto Twig, né ce n'è alcun bisogno. Per stilizzare una tabella con righe di colore alternato possiamo usare una programmazione di questo tipo:

  <style>
          td.odd { background-color: #CCFFFF; }
          td.even { background-color: #0099FF; }
  </style>
   
  <table>
  {% for numeroRiga, unProdotto in tutti_prodotti %}
          <tr>
                 {%if numeroRiga is odd %}
                         <td class='odd'>
                 {% else %}
                         <td class='even'>
                 {% endif %}
                 {{ unProdotto.title }}
                 </td>
          </tr>
  {% endfor %}
  </table>

Viste navigabili

Nella pagina mastro classiche, Sar-At offre l'uso delle viste navigabili, cioè Viste che non mostrano tutti i loro risultati al visitatore in una pagina sola ma invece li dividono in sottopagine, stile risultati della ricerca in Google. Anche in questo caso, Twig non dispone della funzionalità perché non ne ha alcun bisogno.

Per esempio, se il vostro database contiene 500 squadre di calcio e voi desiderate mostrare dieci pagine web, ciascuna con una tabella che riporta nome, città e allenatore per un gruppo di cinquanta squadre, allora vi serve una Vista navigabile. Voi disegnerete una singola pagina mastro che verrà usata, nel caso del nostro esempio, dieci volte.

Come autore del sito potete decidere quanti risultati appariranno in ogni sottopagina, come impaginare i risultati, e costruire strumenti di navigazione per andare avanti e indietro di una pagina, saltare a una sottopagine scelta per numero, mostrare quante sottopagine sono disponibili, tornare al primo o saltare all'ultimo risultato, mostrare uno sfogliatore sulle sottopagine.

L'uso delle viste navigabile è particolarmente semplice. Al posto dell'ormai consueto {BEGIN nomevista}…{END nomevista} adotterete {NAVIGATE nomevista}…{END nomevista}

Qualche ragionamento in più serve per capire come vengano realizzati gli strumenti di navigazione

Il pulsante, o link, "passa alla sottopagina successiva" si troverà al di fuori del blocco {NAVIGATE nomevista}…{END nomevista}. Se così non fosse, apparirebbe molte volte nella pagina. Proseguendo col nostro esempio di 500 squadre di calcio mostrate a gruppi di cinquanta, se il link alla sottopagina 2 si trovasse dentro al blocco {NAVIGATE nomevista}…{END nomevista} di sottopagina 1, allora lo vedremmo cinquanta volte. Quindi questo link starà al di fuori del blocco.

Nulla ci impedisce di usare due viste navigabili nella stessa pagina mastro. Per questo motivo, l'istruzione (tag) Sar-At che genera il link "vai alla sottopagina successiva" dovrà avere due nomi diversi . Per esempio, nella pagina che mostra 50 squadre di calcio, potremmo mostrare anche 25 squadre di basket. Facendo clic su "avanti alla sottopagina successiva del calcio" vedremo le squadre di calcio da 51 a 100 e le squadre di basket da 1 a 25. Facendo invece clic su "avanti alla sottopagina successiva del basket" vedremo le squadre di calcio da 1 a 50 e le squadre di basket da 26 a 50.

Strumenti di navigazione nelle Viste

Per ogni Vista navigabile presente in una vostra pagina mastro, Sar-At automaticamente definisce sette tag aggiuntivi che possono venire usati ovunque nella pagina (ma che non ha molto senso usare dentro al blocco {NAVIGATE nomevista}…{END nomevista}}, come dicevamo). Non è necessario usare tutti i tag: potete sfruttare solo quelli che vi paiono più appropriati.

Il loro nome è composto con un prefisso, mostrato nella tabella sottostante, e un suffisso che è sempre il nome della Vista navigabile di riferimento.

Tag

Scopo

Valore

sar-at-qnext-nomevista

Avanti alla prossima sottopagina

Un link

sar-at-qprev- nomevista

Indietro alla precedente sottopagina

Un link

sar-at-qfirst- nomevista

Torna alla prima sottopagina

Un link

sar-at-qlast- nomevista

Vai all'ultima sottopagina

Un link

sar-at-qcount- nomevista

Numero di sottopagine esistenti

Un numero intero

sar-at-qhere- nomevista

Numero della sottopagine corrente

Un numero intero

sar-at-qnav- nomevista

Navigatore, stile Google, sulle sottopagine disponiibili

Serie di link

sar-at-qnavnum-nomevista

Numero di record da restituire per ogni pagina

Un numero intero

sar-at-qfound- nomevista

Numero di record selezionati in tutto

Un numero intero

sar-at-qlinknext- nomevista

Soddisfare Google

Un <link> HTML

sar-at-qlinkprev- nomevista

Soddisfare Google

Un <link> HTML

sar-at-qsd-nomevista

Ordinare i risultati in modo ascendente o discendente

ASC o DESC

Vediamo un esempio pratico. Nel nostro ipotetico sito sportivo che tratta di calcio e mostra 500 squadre a gruppi di 50, il visitatore sta guardando la quarta sottopagina (squadre da 151 a 200) in ordine alfabetico.

In questo caso avremo:

sar-at-qnext-nomevista: link alla quinta sottopagina (squadre da 201 a 250)

sar-at-qprev-nomevista: link alla terza sottopagina (squadre da 101 a 150)

sar-at-qfirst-nomevista: link alla prima sottopagina (squadre da 1 a 50)

sar-at-qlast-nomevista: link alla ultima sottopagina (squadre da 451 a 500)

sar-at-qcount-nomevista: numero di sottopagine, quindi 10

sar-at-qnavnum-nomevista: numero di righe per pagina, quindi 50

sar-at-qhere-nomevista: numero di questa sottopagina, quindi 4

sar-at-qnav-nomevista: i numeri da 1 a 10, collegati alle relative sottopagine (tranne il numero 4 che non è collegato ad alcunché visto che stiamo già guardando la sottopagina 4).

sar-at-qsd-nomevista: vale ASC perché l'ordinamento è alfabetico ascendente.

Paginazione

Come sappiamo, una Vista viene definita sulla base di un filtro (per esempio: mostra solo i prodotti dal costo unitario sopra i 5 euro, oppure mostra solo le voci del blog più recenti di un mese) e di un numero di risultati da mostrare. Le cose non cambiano nel caso delle Viste navigabili. Semplicemente, il secondo numero rappresenta il numero di risultati per ogni sottopagina.

Nel caso delle Viste realizzate in modalità "per esperti", appare un box compilabile con l'aspetto che mostriamo nella figura sottostante.

Nel caso di una Vista avanzata usata in modo paginabile con il costrutto NAVIGATE, dunque, abbiamo che alla prima esecuzione la Vista viene eseguita esattamente come l'avete digitata. Quando il visitatore naviga, per esempio cliccando il link sar-at-qnext per andare alla sottopagina successiva, Sar-At esegue normalmente la testa della vostra query e vi concatena una cosa che genera lui stesso. Facciamo un esempio osservando la immagine sottostante.

Al primo giro, la query SQL eseguita sarà esattamente quella digitata:

  SELECT *, YEAR(date) AS anno FROM inlinea WHERE visible='Y' ORDER BY date DESC LIMIT 3

Quando il visitatore clicca un link sar-at-qnext per andare alla sottopagina successiva, Sar-At esamina la configurazione del box "Navigazione". Trova l'indicazione di navigare per date discendenti e genera dunque la clausola ORDER BY date DESC LIMIT 3,3. Produce la query finale concatenando la testa così come l'ha trovata con la coda generata. Abbiamo dunque:

  SELECT *, YEAR(date) AS anno FROM inlinea WHERE visible='Y' ORDER BY date DESC LIMIT 3,3

Personalizzazione grafica dei link di navigazione

I link di navigazione "avanti di una pagina", "indietro di una pagina", "torna all'inizio" e "vai alla fine" generati da Sar-At sono normalmente rappresentati con semplici caratteri, e cioè rispettivamente:

Tag

Testo

sar-at-qnext-nomevista

Avanti alla prossima sottopagina

>

sar-at-qprev-nomevista

Indietro alla precedente sottopagina

<

sar-at-qfirst-nomevista

Torna alla prima sottopagina

<<

sar-at-qlast-nomevista

Vai all'ultima sottopagina

>>

Potreste desiderare di usare immagine grafiche (icone) o testi localizzati nella lingua del vostro sito. Nel primo caso, è sufficiente usare un CSS, così:

  <style type='text/css' title='text/css' media='screen'>
  #sar-at-qlast-nomevista span { display: none; }
  #sar-at-qlast-nomevista
  {
          display: inline-block;
          background: url(navigate/2rightarrow.png) 0 0 no-repeat;
          width: 16px;
          height: 16px;
  }
  #sar-at-qnext-nomevista span { display: none; }
  #sar-at-qnext-nomevista
  {
          display: inline-block;
          background: url(navigate/1rightarrow.png) 0 0 no-repeat;
          width: 16px;
          height: 16px;
  }
  #sar-at-qprev-nomevista span { display: none; }
  #sar-at-qprev-nomevista
  {
          display: inline-block;
          background: url(navigate/1leftarrow.png) 0 0 no-repeat;
          width: 16px;
          height: 16px;
  }
  #sar-at-qfirst-nomevista span { display: none; }
  #sar-at-qfirst-nomevista
  {
          display: inline-block;
          background: url(navigate/2leftarrow.png) 0 0 no-repeat;
          width: 16px;
          height: 16px;
  }
  </style>

Per sostituire i testi con altri, usate un sistema JavaScript come jQuery. La sintassi sarà tipo questa:

  $('#sar-at-qfirst-nomevista span').html('quel che vuoi tu');

Il motore di ricerca

Il meccanismo delle Viste si può utilizzare anche per creare semplici motori di ricerca interni al sito - usabili indifferentemente da pagine mastro Twig o classiche. (Per un motore di ricerca avanzato si veda "plug in motore di ricerca incorporato" nell'ultimo capitolo del manuale Sar-At).

Le viste utilizzate come motore di ricerca sono quelle in cui specifichiamo "mostra solo i record in cui (regola di ricerca) - è uguale a - valore scelto dal visitatore".

Facciamo un esempio pratico. Creiamo una nuova Vista. Le diamo un nome a piacere e per etichetta scegliamo "motore_ricerca". Impostiamo la Vista perché selezioni i soli record il cui titolo contiene un valore scelto dal visitatore, che la pagina HTML passerà nel parametro search.

Perché il motore di ricerca abbia senso dovremo preparare due pagine HTML. La prima pagina (form di ricerca) permette al visitatore di scrivere il testo che vuole cercare e può avere un aspetto di questo tipo:

La seconda pagina mostra i risultati della ricerca, impaginati a nostro piacere, usando la Vista.

Il form di ricerca

Il form di ricerca è un comune form (o "modulo") HTML che chiama Sar-At a eseguire la ricerca. La modalità di invio è indifferentemente POST o GET (Sar-At supporta entrambe). Il modulo deve necessariamente passare a Sar-At le seguenti informazioni :

Nome

Obbligatorio?

Usi e note

template

Come sempre quando chiamiamo Sar-At dobbiamo specificare la sezione che fornisce il contesto. Se nella pagina "risultati della ricerca" mostriamo esclusivamente i risultati della ricerca, questo parametro può avere un valore qualsiasi, ma il valore deve essere fornito e deve essere valido (il nome di una sezione esistente). Se nella pagina "risultati della ricerca" mostriamo anche altro (per esempio, la scheda del nostro prodotto di punta, il numero 250, "crema al cioccolato") allora passeremo la sezione che ci interessa (per esempio, "prodotti").

id

No

Se nella pagina "risultati della ricerca" mostriamo esclusivamente i risultati della ricerca, questo parametro può venire omesso. Se nella pagina "risultati della ricerca" mostriamo anche altro (per esempio, la scheda del prodotto numero 250, "crema al cioccolato") allora passeremo il numero caratteristico che ci interessa (per esempio, 250).

masterPage

Nome della pagina "risultati della ricerca".

search

È il valore da cercare

Vediamo un esempio di form di ricerca in HTML:

  <form action="showPage.php" method="post">
          <input type="hidden" name="template" value="prodotti" />
          <input type="hidden" name="masterPage" value="trova.html" />
          <input type="text" name="search" size="30" />
  </form>

Pagina "risultati della ricerca"

La pagina con il risultato si impagina esattamente come una qualsiasi pagina mastro che contiene una Vista. (Vedere il paragrafo "Viste e pagine mastro: alcuni semplici esempi" sopra).

Quando create una nuova Vista, Sar-.At genera automaticamente il codice di un modulo analogo a quello appena visto e anche il codice HTML per una pagina "risultati della ricerca" che utilizza quella vista. Potete copiare quel codice e reimpaginarlo come più vi aggrada.

Quando nulla viene trovato

In una pagina "risultati della ricerca" molto semplice, come quella proposta qui sopra, quando il visitatore cerca un testo che non esiste, allora appare una pagina bianca. Una soluzione più elegante si ottiene utilizzando il meccanismo "se…allora..altrimenti". Ecco un esempio scritto per una pagina mastro classica:

  {IF motore_ricerca}
          <p>Elenco dei prodotti il cui nome contiene la parola <em>{search}</em>:</p>
          {BEGIN motore_ricerca}
                 <p>{title}</p>
          {END motore_ricerca}
  {ELSE motore_ricerca}
          <p>Spiacente, nessun prodotto contiene la parola <em>{search}</em> nel nome.</p>
  {ENDIF motore_ricerca}

Ecco l'equivalente Twig:

  {% if motore_ricerca %}
        {% for unProdotto in motore_ricerca %}
              <p>{{ unProdotto.title }}</p>
        {% endfor %}
  {% else %}
        <p>Spiacente, nessun prodotto contiene la parola <em>{{ _GET.search }}</em> nel nome.</p>
  {% endif %}

Se il visitatore cerca "biscotti" allora il risultato HTML sarà:

  <p>Elenco dei prodotti il cui nome contiene la parola <em>biscotti</em>:</p>
  <p>Biscotti al cioccolato</p>

Se il visitatore cerca "vaniglia" allora il risultato HTML sarà:

  <p>Spiacente, nessun prodotto contiene la parola <em>vaniglia</em> nel nome.</p>

Una trattazione completa della sintassi se…allora…altrimenti si trova nell'ultimo capitolo di questo manuale, la quale contiene anche la documentazione dell'istruzione LOCATION - spesso utile per gestire le ricerche che non hanno avuto successo.

Motore di ricerca: altri esempi

Un motore di ricerca può prendere anche altre forme: per esempio, quello di un menu popup. In HTML, un menu è semplicemente una istruzione <select> che contiene una serie di <option>, una per ogni voce. Possiamo creare una pagina mastro tale per cui Sar-At crea la <select> per noi.

Proseguiamo con l'esempio visto nelle pagine precedenti: immaginiamo dunque di aver creato una vista etichettata "elenco_prodotti" che trova tutti i tre membri della sezione "prodotti" e li elenca in ordine alfabetico. Immaginiamo anche di aver definito una vista "motore_ricerca", la quale seleziona i soli record il cui titolo contiene un valore scelto dal visitatore.

Possiamo allora creare il form di ricerca in questo modo. Versione classica:

  <form action="showPage.php" method="post">
        <select name="id">
              <option value='' disabled selected>
                    (Scegli il prodotto che ti interessa)
              </option>
              {BEGIN elenco_prodotti}
              <option value="{id}">
                    {title}
              </option>
              {END elenco_prodotti}
        </select>
        <input type="hidden" name="template" value="prodotti">
        <input type="submit" value="Vai">
  </form>

Versione Twig:

  <form action="showTwig.php" method="post">
        <select name="id">
              <option value='' disabled selected>
                    (Scegli il prodotto che ti interessa)
              </option>
              {% for unProdotto in elenco_prodotti %}
              <option value="{{ unProdotto.id }}">
                    {{ unProdotto.title }}
              </option>
              {% endfor %}
        </select>
        <input type="hidden" name="template" value="prodotti">
        <input type="submit" value="Vai">
  </form>

Ecco il risultato HTML:

  <form action="showPage.php" method="post">
        <select name="id">
              <option value='' disabled selected>
                    (Scegli il prodotto che ti interessa)
              </option>
               
              <option value="103">
                    Biscotti al cioccolato
              </option>
               
              <option value="101">
                    Torta al cioccolato
              </option>
               
              <option value="102">
                    Yogurt al cioccolato
              </option>
        </select>
        <input type="hidden" name="template" value="prodotti">
        <input type="submit" value="Vai">
  </form>

A video apparirà così:

La pagina "risultati della ricerca" non va affatto cambiata rispetto all'esempio visto sopra.

Viste di tabelle correlate

In alcuni casi può rendersi necessario il collegamento tra loro delle informazioni contenute in due o più sezioni di un sito Sar-At.

Immaginate di voler creare un sito web che presenta marche e modelli di automobili. Avremo una sezione chiamata "marche" che contiene, tra le altre, queste informazioni:

Title

Nazione

Id

Volksvagen

Germania

1

Ford

USA

2

Honda

Giappone

3

Nissan

Giappone

4

Avremo anche una sezione "modelli" che contiene, tra le altre, queste informazioni:

Title

Id

Id_marca

Civic

100

3

Insight

101

3

Lupo

102

1

È evidente che ci sono molte cose da dire sulle case automobilistiche , oltre ai modelli di auto che producono. Possiamo ben immaginare che la pagina sulla Ford conterrà molte informazioni.

È anche ovvio che ci sono molte informazioni da comunicare sui modelli di auto; per esempio, la pagina sulla Lupo sarà ricca di foto, testi, filmati eccetera. Immaginiamo però di voler dedicare una pagina mastro a mostrare le correlazioni tra marche e modelli. Bisognerà, per esempio, mostrare insieme le informazioni fondamentali sulla Fiat e anche l'elenco dei modelli prodotti da Fiat. La pagina mastro "marche-modelli.html" e farà riferimento alle marche. Se la chiamiamo a visualizzare l'id 3 vedremo tutto ciò che si può voler sapere su Honda, compresi i link alle pagine di Civic e Insight.

Per mostrare dentro questa pagina mastro tutti e soli i modelli prodotti dalla Casa selezionata , creiamo una Vista sui modelli in questo modo:

In altre parole: la Vista "modelli_della_marca" apparirà all'interno della pagina "marche-modelli.html". Quando Sar-At la incontra andrà a selezionare tutti e soli i modelli per cui il campo "id_marca" è uguale allo id della pagina corrente.

Ecco il codice HTML che potremo inserire dentro "marche-modelli.html":

Versione classica

Versione Twig

     La casa {title} produce i seguenti modelli:
     <ul>{BEGIN modelli_della_marca}
      <li>
       <a href='/cartella_magica/{saratUrl}'>
        {title}
       </a>
      </li>
     {END modelli_della_marca}
     </ul>

La casa {{ title }} produce i seguenti modelli:

     <ul>
     {% for m in modelli_della_marca %}
     <li>
     <a href='/cartella_magica/{{ saratUrl }}'>
        {{ m.title }}
     </a>
     </li>
     {% endfor %}
     <ul>
   

Le viste di tabelle correlate sono automaticamente utilizzabili per i portali, che descriviamo immediatamente di seguito.

Viste e portali

Quando avete creato una vista di tabella correlata (come descritto nel paragrafo precedente di questo manuale), potete scegliere di visualizzarne i risultati non solo dentro al sito pubblico ma anche dentro Sar-At stesso. Tornando al nostro esempio di marche e modelli di automobili, è piuttosto comodo che un redattore possa inserire le informazioni su un nuovo modello Ford dalla scheda generale di casa Ford. In altre parole, lavorando dalla sezione "marche" potrà inserire un "modello", e quest'ultimo sarà automaticamente collegato alla sua marca con l'id numerico corretto.

I portali si creano nella linguetta Struttura della sezione contenitrice "madre", sempre e solo dopo aver definito la vista di tabella correlata. È un semplice processo in tre fasi. Nella prima, si assegna al portale un nome di fantasia e si sceglie dal menu a scomparsa il nome della sezione figlia ("modelli" nel nostro esempio).

Fase due: a questo punto Sar-At mostra tutte le viste che correlano la sezione madre con la sezione figlia e ci permette di sceglierne una.

Nella terza ed ultima fase, Sar-At ci chiede quali funzionalità debbono essere disponibili attraverso il portale. Se non spuntiamo niente, il redattore potrà vedere tutti i modelli di Fiat dentro alla scheda della casa automobilistica, ma senza poterli manipolare. Se spuntiamo la casella "Consenti aggiunta record", apparirà un pulsante che consente di aggiungere una nuova pagina alla sezione figlia ("modelli" nel nostro esempio). Al redattore apparirà in pop-up una nuova finestra Sar-At per effettuare l'inserimento.

Se spuntiamo la casella "Consenti cancellazione", il redattore potrà cancellare i record correlati dalla tabella figlia ("modelli" nel nostro esempio) senza lasciare la scheda della tabella madre (la casa produttrice nel nostro esempio.

Il permesso di cancellare record attraverso il portale sovrasta il permesso di intervenire sulla sezione figlia assegnato nel menu Utilizzatori, voce Amministratori. Per esempio, un redattore che normalmente non vede neppure la voce "modelli" dentro al menu Pagine di Sar-At può cancellarne i record se il Portale glielo consente.

Completata la terza fase e confermata la creazione del campo portale, il portale appare nella scheda Sar-At. L'aspetto è quello della figura sottostante (qui vediamo un portale che mostra due soli record correlati e nel quale sono state consentite in fase tre sia le aggiunte che le cancellazioni, queste ultime attraverso l'icona del divieto).

Uso avanzato dei portali

È possibile inserire contenuto attraverso il portale anche prima di registrare per la prima volta il record contenitore. Per esempio, chi sta creando la scheda della Nissan può inserire informazioni sulla Note prima di aver ciccato "Invia modifiche". Naturalmente, potrebbe accadere che il redattore si interrompa dopo aver salvato i dati sul modello d''auto ma prima di aver registrato la scheda della casa madre. In questo caso, il contenuto del portale è orfano di un genitore, poiché è scollegato. Sar-At proporrà in questo caso i record orfani non appena si ricomincerà a inserire una nuova scheda nella sezione che contiene il portale, ma (per evitare errori umani e motivi di confusione) proporrà la ricomposizione del lavoro interrotto esclusivamente al redattore originale, quello che aveva inserito i record correlati rimasti temporaneamente orfani.

Se due amministratori accedono contemporaneamente a un record che contiene un portale, soltanto il primo può modificare il record, ma anche il secondo può aggiungere e togliere righe dal portale.

Se i record mostrati nel portale fanno riferimento a una sezione menu, Sar-At mostra il testo umanamente comprensibile e non il riferimento interno (per proseguire il nostro esempio di marche e modelli di automobili visto in precedenza, se un amministratore guarda la scheda della FIAT, e se la tabella con i modelli contiene un campo chiamato "in commercio" che vale 0 per indicare un modello obsoleto e invece 1 per indicare un'automobile in produzione, allora la colonna in questione non mostrerà i numeri 0 ed 1 ma bensì il testo "In produzione" o "Fuori commercio".

Ricerca a tutto testo

Le Viste studiate sin qui hanno un limite, che a volte può farsi seccante: ci permettono di ricercare solo all'interno di un campo tra i molti che costituiscono la sezione. In alcuni casi i nostri visitatori vorranno cercare una informazione senza sapere dove sia stata inserita. Per esempio, nel campo ingredienti, in ricetta o in note della nostra sezione gastronomia? Un altro esempio: in una sezione FAQ, è importante segnalare una pagina quando contiene nella domanda il testo cercato dal visitatore, ma anche se il testo cercato appare solo nella risposta.

Se desiderate creare una vista che opera a tutto testo, dovete selezionare una volta per tutte quali campi debbono venire ricercati e quali esclusi. Cliccate il link Seleziona i campi per la ricerca a tutto testo nella schermata delle Viste, oppure selezionate la linguetta Proprietà e premete il pulsante Ricerca a tutto testo….

Ciò fatto, potete attivare l'opzione della ricerca a tutto testo nella schermata della Vista. Alcune osservazioni importanti:

  • Sar-At costruisce uno speciale indice di tutte le informazioni contenute nella sezione quando voi definite l'elenco dei campi. Questa operazione può richiedere alcuni minuti e occupa spazion sul disco rigido del server.
  • Nella costruzione dell'indice vengono esclude le parole brevi (tre lettere o meno) in quanto molto frequenti. Questo significa che se un visitatore del vostro sito cerca "DNA" o "DOC" non troverà nulla.
  • Per ogni sezione è consentito un solo indice, quindi non potete avere due Viste a tutto testo differenti per la medesima sezione.
  • Nelle comuni Viste, Sar-At cerca esattamente quello che viene specificato. Nelle viste a tutto testo, i termini possono essere disgiunti. Per esempio, se la scheda di Aristide Palazzi contiene il testo "Il grande Pallazzi interpreta il ruolo del Barbiere di Siviglia per la prima volta durante una recita alla scuola materna nel 1986", allora usando una Vista normale la ricerca di "Palazzi Barbiere" non troverà nulla, perché nel testo i due nomi non sono vicini. Usando una Vista a tutto testo, la frase viene localizzata e segnalata.

Esistono tre differenti modalità per le Viste a tutto testo:

Il primo caso è quello base. Nel secondo caso, Sar-At permette che la ricerca utilizzi simboli analoghi a quelli accettati da Google. La tabella sottostante illustra le possibilità della ricerca stile Google.

Esempio

Spiegazione?

motore di ricerca

Trova anche la frase "La ricerca delle case automobilistiche ha prodotto un motore a basso consumo". Infatti le parole cercate non debbono essere limitrofe e la parola "di" viene ignorata in quanto breve.

"motore di ricerca"

La frase dell'esempio precedente non viene trovata. Sar-At cerca esattamente l'espressione "motore di ricerca" nei testi.

+motore ricerca

La frase "Il motore diesel" viene trovata. La frase "La ricerca sul motore non inquinante" viene trovata e listata per prima. La frase "La ricerca scientifica produce nuovi risultati" non viene trovata, perché Sar-At considera obbligatoria la parola "motore" a causa della presenza del simbolo "+"

+motore -ricerca

La frase "Il motore diesel" viene trovata. La frase "La ricerca sul motore non inquinante" non viene trovata perché Sar-At esclude i campi che contengono la parola "ricerca" a causa della presenza del simbolo "-"

>motore <ricerca

Trova tutte le frasi che contengono la parola motore, o la parola ricerca, o entrambe. Lista per prime quelle frasi dove sono presenti entrambe le parole, poi quelle dove c'è la sola parola "motore" (il segno di maggiore indica che è maggiormente importante).

motor*

Vengono trovati tutte le frasi che contengono le parole motore, motori, motorizzazione, motorino e Motorhead. L'asterisco rappresenta una successione qualsiasi di caratteri

+motore +(>diesel <benzina)

L'uso di parentesi permette di strutturare le ricerche. In questo caso troveremo le frasi che parlano di motore a benzina e quelle che parlano di motore diesel. Le frasi che parlano genericamente di motore non verranno rilevate, a causa della presenza del segno +. I motori diesel saranno citati per primi.

La terza possibilità per le Viste, il completamento intelligente, offre autocorrezione degli errori e delle approssimazioni del visitatore al prezzo di un raddoppio dei tempi di ricerca (in un sito disneyano "cane che parla" trova le pagine su Pippo) .

Viste: risposte a domande frequenti

La Vista non viene risolta nella mastro classica

Ho creato una Vista in Sar-At. Quando la provo con lo strumento incorporato funziona correttamente. Quando la inserisco dentro la pagina mastro non viene risolta. Il mio HTML ha questo aspetto:

<ul>

{begin la_mia_vista}

<li>

<a href='showPage.php?template=sezione&id={id}'>{title}</id>

</li>

{end la_mia_vista}

</ul>

Il codice HTML che vedo produrre a Sar-At (dentro al browser) ha questo aspetto:

<ul>

{begin la_mia_vista}

<li>

<a href='showPage.php?template=sezione&id=102'>Nissan</id>

</li>

{end la_mia_vista}

</ul>

Questo comportamento appare quando Sar-At non può risolvere la Vista a causa di un errore di sintassi. Gli errori più frequenti sono:

  • Utilizzo delle pagine BEGIN e END in minuscolo (devono essere maiuscoli).
  • Spazi bianchi prima di BEGIN e END oppure prima della graffa chiusa (non devono essercene)
  • Uso di una entità SGML o HTTP al posto della graffa. Questo accade soprattutto a chi usa Dreamweaver per creare la pagine mastro. Dreamweaver talora sostituisce il carattere { con la combinazione %7B e il carattere } con la combinazione %7D

Viste multiple

Posso usare molte viste dentro la medesima pagina mastro? Posso riutilizzare la medesima Vista in pagine mastro diverse, anche cambiando l'impaginazione (il codice HTML)? Posso usare per due volte la medesima Vista dentro una singola pagina mastro?

Sì e sì e ancora sì.

Viste su più sezioni

Posso creare una Vista che ricerca dentro più sezioni contemporaneamente? Vorrei fare un unico motore di ricerca che lavori su tutte le informazioni del mio sito e non un motore di ricerca per ogni sezione.

Possiamo ottenete il risultato creando più viste e usandole insieme nella medesima pagina "risultato della ricerca". Ogni vista lavorerà su una sezione distinta: per esempio avremo una vista "motore_ricerca1" che opera sulla sezione "prodotti", una vista "motore_ricerca2" che lavora sulla sezione "risposte" e una vista "motore_ricerca2" che lavora sulla sezione "recall".

Nella pagina che mostra i risultati della ricerca, concateneremo le Viste. In una pagina classica, per esempio, avremo:

  {IF motore_ricerca1}
          <p>Elenco dei prodotti il cui marchio contiene la parola {search}:</p>
          {BEGIN motore_ricerca1}
          <p><a href='showPage.php?template=prodotti&id={id}'>{title}</a></p>
          {END motore_ricerca1}
  {ENDIF motore_ricerca1}
  {IF motore_ricerca2}
          <p>Elenco delle risposte il cui titolo contiene la parola {search}:</p>
          {BEGIN motore_ricerca2}
          <p><a href='showPage.php?template=risposte&id={id}'>{title}</a></p>
          {END motore_ricerca2}
  {ENDIF motore_ricerca2}
  {IF motore_ricerca3}
          <p>Elenco dei recall il cui nome contiene la parola {search}:</p>
          {BEGIN motore_ricerca3}
          <p><a href='showPage.php?template= recall&id={id}'>{title}</a></p>
          {END motore_ricerca3}
  {ENDIF motore_ricerca3}

Vista di viste

Posso fare una vista di viste? Cioè mettere una Vista dentro a un'altra?

In una pagina mastro classica no, ma nella quasi totalità dei casi questo scopo si può ottenere con una vista ad hoc. In una pagina mastro Twig sì, al prezzo di un po' di complicazione. Per esempio, immaginate di avere una sezione "news" e di voler rappresentare queste notizie, pressate con una Vista, ma raggruppandole per mese. Twig mette a disposizione variabili e cicli, e la cosa diventa facilmente realizzabile:

  {% set mese_corrente = "Nessuno" %}
   
  {% for faq in ultime_cinquanta_news %}
        {% if ((faq.lastMod | date("F")) != mese_corrente) %}
              {% set mese_corrente = faq.lastMod | date("F") %}
              <h1>{{faq.lastMod | date("F Y")}}</h1>
        {% endif %}
        <li>{{faq.lastMod | date("d/m/Y")}} <em>{{faq.title}}</em></li>
  {% endfor %}

Cancellare una Vista

Voglio cancellare una Vista, che credo non serva più, ma temo di sbagliare. Ho paura che sia in uso in una pagina mastro di cui mi sono dimenticato. Che faccio?

Sar-At impedisce la cancellazione delle Viste indispensabili al funzionamento del sito. Il programma inoltre mostra nella scheda della Vista un elenco di tutte le pagine mastro che incorporano quella vista: per vederlo basta cliccare il pulsante

Se desiderare ricreare una vista da zero, la protezione contro la cancellazione delle Viste dà fastidio. In questo caso cambiate etichetta alla vista cancellanda, create la nuova versione della vista usando il nome che intendete mantenere, cancellate la vista originale e rinominata, infine validate nuovamente le pagine mastro coinvolte.