Далее - примеры использования Rivet. Подразумевается что читатель имеет некоторые знания Tcl. Если же вы его не знаете - не волнуйтесь, это простой язык, и множество как минимум англоязычной документации и учебников доступно в сети. Посмотрите например сюда .
Пример 1. Hello World
Естественно, первым примером будет "Hello World".
Мы предполагаем что к этому моменту Apache сконфигурирован и понимает .rvt файлы, создадим файл hello.rvt в месте где Apache сможет его найдти со следующим содержимым:
<? puts "Hello World" ?>
Если вы обратитесь к этому файлу через броузер, вы должны увидеть практически чистую страницу с надписью "Helo World" (без кавычек).
Пример 2. Создание таблицы
В следующем, тоже простом примере мы покажем как создать таблицы:
<? 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" ?>
Если вы вчитаетесь в код, то убедитесь что это чистейший Tcl. Мы можем запустить этот код и вне Rivet - и он будет генерировать такой же HTML!
Результат должен быть похож на:

Пример 3. Доступ к переменным
А тут мы продемонстрируем как обращаться с переменными переданными вам методом POST или GET.
Из такой HTML формы:
<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>
Мы можем использовать rivet скрипт чтобы получить доступ к этим переменным:
<?
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>
<?
}
?>
Первый оператор проверяет что переменная boss была переданна скрипту, и потом что-то делает с этой информацией. Если же такой нет - то в список ошибок добавляется сообщение об этом прискорбном факте.
Во втором куске кода, переменная salary обрабатывается примерно таким же образом, и к тому же еще и проверяется на то является ли она числом.
Если переменная boss не введена - то она заменяется на "Mr. Burns".
А последний кусок кода немножко хитрее, потому что переменная skills - это listbox, и в принципе может иметь несколько значений, и тут мы покажем как с ними поступать.
Скрипт далее проверяет что errlist пустой (а если нет - то информирует вас об ошибках) и говорит что спасибо и все такое.
Пример 4. Закачка файлов (Upload)
Пусть есть такой HTML код 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>
Из такого Tcl кода, например, (под названием upload.rvt) мы получаем доступ к загруженному файлу.
<? upload save MyUpload /tmp/uploadfiles/file1 puts "Saved file [upload filename MyUpload] \ ([upload size MyUpload] bytes) to server" ?>