Esempi ed uso

Seguono alcuni esempi sull'uso di Rivet. Si presuppone che conosciate, anche parzialmente, il linguaggio di programmazione Tcl. Se non conoscete molto Tcl, non c'è da preoccuparsi: è semplice e vi sono alcune buone risorse disponibili sul web che vi permetteranno di padroneggiarlo velocemente. A questo proposito, vedete la sezione web sites.

Esempio 1. Hello World

Come qualsiasi altro tool, è piacevole vedere qualcosa al lavoro, così andremo a creare una piccola pagina "Hello World".

Assumendo che sia stato configurato correttamente Apache, create un file chiamato hello.rvt in una directory dove Apache lo possa trovare, con il seguente contenuto:

<?
puts "Hello World"
?>

Se poi vi accederete con vostro browser, sarà possibile vedere una pagina nera con il testo "Hello World" (senza apici).

Esempio 2. Generare una tabella

In un'altro semplice esempio, genereremo dinamicamente una tabella:

<? puts "<table>\n"
for {set i 1} { $i <= 8 } {incr i} {
    puts "<tr>\n"
    for {set j 1} {$j <= 8} {incr j} {
        set num [ expr $i * $j * 4 - 1]
        puts [ format "<td bgcolor=\"%02x%02x%02x\" > $num $num $num </td>\n" \
		   $num $num $num ]
    }
    puts "</tr>\n"
}
puts "</table>\n" ?>

Se leggete il codice, è possibile vedere che è puro Tcl. È possibile mantenere lo stesso codice, eseguirlo fuori da Rivet e generare la stessa pagina HTML!

Il risultato sarà qualcosa di simile a questo:

Esempio 3. Accesso alle variabili

In questa sezione mostreremo come accedere alle variabili utilizzando gli operatori GET o POST.

Data una form HTML come la seguente:

     <form action="vars.rvt">
      <table>
	<tbody>
	  <tr>
	    <td><b>Title:</b></td>
	    <td><input name="title"></td>
	  </tr>
	  <tr>
	    <td><b>Salary:</b></td>
	    <td><input name="salary"></td>
	  </tr>
	  <tr>
	    <td><b>Boss:</b></td>
	    <td><input name="boss"></td></tr>
	  <tr>
	    <td><b>Skills:</b></td>
	    <td>
	      <select name="skills" multiple="multiple">
		<option>c</option>
		<option>java</option>
		<option>Tcl</option>
		<option>Perl</option>
	      </select>
	    </td>
	  </tr>
	  <tr>
	    <td><input type="submit"></td>
	  </tr>
	</tbody>
      </table>
    </form>

Potete utilizzare questo script di Rivet per ottenere i valori delle variabili:

<?
set errlist {}
if { [var exists title] } {
    set title [var get title]
} else {
    set errlist "You need to enter a title"
}

if { [var exists salary] } {
    set salary [var get salary]
    if { ! [string is digit $salary] } {
	lappend errlist "Salary must be a number"
    }
} else {
    lappend errlist "You need to enter a salary"
}

if { [var exists boss] } {
    set boss [var get boss]
} else {
    set boss "Mr. Burns"
}

if { [var exists skills] } {
    set skills [var list skills]
} else {
    lappend errlist "You need to enter some skills"
}

if { [llength $errlist] != 0 } {
    foreach err $errlist {
	puts "<b> $err </b>"
    }
} else {
    puts "Thanks for the information!"
    ?>
    <table>
      <tbody>
	<tr>
	  <td><b>Title:</b></td>
	  <td><? puts $title ?></td>
	</tr>
	<tr>
	  <td><b>Boss:</b></td>
	  <td><? puts $boss ?></td>
	</tr>
	<tr>
	  <td><b>Salary:</b></td>
	  <td><? puts $salary ?></td>
	</tr>
	<tr>
	  <td><b>Skills:</b></td>
	  <td><? puts $skills ?></td>
	</tr>
      </tbody>
    </table>
    <?
}
?>

La prima istruzione si assicura che la variabile boss sia passata allo script e poi fa qualcosa con quella informazione. Se non è presente, un errore viene aggiunto alla lista degli errori.

Nel secondo blocco del codice, la variabile salary è riportata con un'altro errore di controllo, poiché è un numero, è necessario che sia composto da cifre.

Alla variabile boss non è richiesto di essere inviata, la setteremo a "Mr. Burns" se non è tra le informazioni ricevute.

L'ultimo pezzo del codice di gestione delle variabili è un pezzo ingannatore perché skills è una listbox e può avere, potenzialmente, valori multipli. Opteremo di riceverla come una lista, in modo da poterla riutilizzare.

Lo script si assicura che la variabile errlist sia vuota e restituisce un messaggio di ringraziamento. Se errlist non è vuota, viene stampata la lista degli errori riscontrati.

Esempio 4. Caricare file

Il seguente HTML in un file, detto, upload.html

<form action="foo.rvt" enctype="multipart/form-data" method="post">
<input type="file" name="MyUpload"></input>
<input type="submit" value="Send File"></input>
</form>

Può essere usato con il seguente codice Tcl in un secondo file (upload.rvt per esempio) per creare una form che carica un file.

<?
upload save MyUpload /tmp/uploadfiles/file1
puts "Saved file [upload filename MyUpload] \
	([upload size MyUpload] bytes) to server"
?>