1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
|
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Примеры использования</title><link rel="stylesheet" href="rivet.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.66.1"><link rel="start" href="index.ru.html" title="Apache Rivet"><link rel="up" href="index.ru.html" title="Apache Rivet"><link rel="prev" href="commands.ru.html" title="Rivet: Tcl команды и переменные"><link rel="next" href="tcl_packages.ru.html" title="Rivet Tcl packagы"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Примеры использования</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="commands.ru.html"><img src="images/prev.png" alt="Пред."></a></td><th width="60%" align="center"></th><td width="20%" align="right"><a accesskey="n" href="tcl_packages.ru.html"><img src="images/next.png" alt="След."></a></td></tr></table></div><div class="section" lang="ru"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="examples"></a>Примеры использования</h2></div></div></div><p style="width:90%">
Далее - примеры использования Rivet. Подразумевается что
читатель имеет некоторые знания Tcl. Если же вы его не знаете -
не волнуйтесь, это простой язык, и множество как минимум англоязычной
документации и учебников доступно в сети.
Посмотрите например <a href="help.ru.html#websites" title="Веб сайты"> сюда </a>.
</p><div class="example"><a name="hello world"></a><p class="title"><b>Пример 1. Hello World</b></p><p style="width:90%">
Естественно, первым примером будет "Hello World".
</p><p style="width:90%">
Мы предполагаем что к этому моменту Apache сконфигурирован и понимает
.rvt файлы, создадим файл
<tt class="filename">hello.rvt</tt> в месте где Apache сможет
его найдти со следующим содержимым:
</p><pre style="background:#bbffbb ; width:90ex ; margin: 2ex ; padding: 1ex; border: solid black 1px ; white-space: pre; font-family:monospace ; " class="programlisting"><?
puts "Hello World"
?>
</pre><p style="width:90%">
Если вы обратитесь к этому файлу через броузер, вы должны увидеть
практически чистую страницу с надписью "Helo World" (без кавычек).
</p></div><div class="example"><a name="table"></a><p class="title"><b>Пример 2. Создание таблицы</b></p><p style="width:90%">
В следующем, тоже простом примере мы покажем как создать таблицы:
</p><pre style="background:#bbffbb ; width:90ex ; margin: 2ex ; padding: 1ex; border: solid black 1px ; white-space: pre; font-family:monospace ; " class="programlisting"><? 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" ?>
</pre><p style="width:90%">
Если вы вчитаетесь в код, то убедитесь что это чистейший Tcl. Мы можем
запустить этот код и вне Rivet - и он будет генерировать такой же HTML!
</p><p style="width:90%">
Результат должен быть похож на:
</p><div><img src="table.png"></div></div><div class="example"><a name="variable_access"></a><p class="title"><b>Пример 3. Доступ к переменным</b></p><p style="width:90%">
А тут мы продемонстрируем как обращаться с переменными
переданными вам методом POST или GET.
</p><p style="width:90%">
Из такой HTML формы:
</p><pre style="background:#bbffbb ; width:90ex ; margin: 2ex ; padding: 1ex; border: solid black 1px ; white-space: pre; font-family:monospace ; " class="programlisting"> <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>
</pre><p style="width:90%">
Мы можем использовать rivet скрипт чтобы получить доступ к
этим переменным:
</p><pre style="background:#bbffbb ; width:90ex ; margin: 2ex ; padding: 1ex; border: solid black 1px ; white-space: pre; font-family:monospace ; " class="programlisting"><?
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>
<?
}
?>
</pre><p style="width:90%">
Первый оператор проверяет что переменная
<tt class="varname">boss</tt> была переданна скрипту, и потом
что-то делает с этой информацией.
Если же такой нет - то в список ошибок добавляется сообщение
об этом прискорбном факте.
</p><p style="width:90%">
Во втором куске кода, переменная
<tt class="varname">salary</tt> обрабатывается примерно таким же
образом, и к тому же еще и проверяется на то является ли она
числом.
</p><p style="width:90%">
Если переменная <tt class="varname">boss</tt> не введена - то она
заменяется на "Mr. Burns".
</p><p style="width:90%">
А последний кусок кода немножко хитрее, потому что переменная
<tt class="varname">skills</tt> - это listbox, и в принципе
может иметь несколько значений, и тут мы покажем как с ними
поступать.
</p><p style="width:90%">
Скрипт далее проверяет что
<tt class="varname">errlist</tt> пустой (а если нет - то информирует
вас об ошибках) и говорит что спасибо и все такое.
</p></div><div class="example"><a name="upload"></a><p class="title"><b>Пример 4. Закачка файлов (Upload)</b></p><p style="width:90%">
Пусть есть такой HTML код
<tt class="filename">upload.html</tt>
</p><pre style="background:#bbffbb ; width:90ex ; margin: 2ex ; padding: 1ex; border: solid black 1px ; white-space: pre; font-family:monospace ; " class="programlisting"><form action="foo.rvt" enctype="multipart/form-data" method="post">
<input type="file" name="MyUpload"></input>
<input type="submit" value="Send File"></input>
</form>
</pre><p style="width:90%">
Из такого Tcl кода, например,
(под названием <tt class="filename">upload.rvt</tt>)
мы получаем доступ к загруженному файлу.
</p><pre style="background:#bbffbb ; width:90ex ; margin: 2ex ; padding: 1ex; border: solid black 1px ; white-space: pre; font-family:monospace ; " class="programlisting"><?
upload save MyUpload /tmp/uploadfiles/file1
puts "Saved file [upload filename MyUpload] \
([upload size MyUpload] bytes) to server"
?></pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="commands.ru.html"><img src="images/prev.png" alt="Пред."></a></td><td width="20%" align="center"><a accesskey="u" href="index.ru.html"><img src="images/up.png" alt="Уровень выше"></a></td><td width="40%" align="right"><a accesskey="n" href="tcl_packages.ru.html"><img src="images/next.png" alt="След."></a></td></tr><tr><td width="40%" align="left" valign="top">Rivet: Tcl команды и переменные</td><td width="20%" align="center"><a accesskey="h" href="index.ru.html"><img src="images/home.png" alt="Начало"></a></td><td width="40%" align="right" valign="top">Rivet Tcl packagы</td></tr></table></div></body></html>
|