Данные передаются точно так же, как и для обычных html файлов - через URL либо с помощью формы методом GET. Но, если вы хотите изменять SSI-вставку в зависимости от переданных данных, читайте дальше.
Для SSI данные лучше передавать в
виде name=value. Метод GET формы так и делает, а вот
если вы самостоятельно формируете строку
запроса, она должна выглядеть так:
file.shtml?var1=value1&var2=value2 и т.д.
Нам мало передать данные. Нам
надо еще и получить их. Для того, чтобы увидеть,
что мы там себе передали, включите в файл строку
<!--#printenv -->
Эта строка нам в дальнейшем не понадобится. Она
нужна лишь для того, чтобы увидеть, передается ли
хоть что-нибудь. В дальнейшем, если что-то не так
пойдет, вставьте эту строку в файл и проверьте,
может вы где-то не так буковку написали.
Допустим, у вас на сайте есть FAQ,
но ответы на вопросы такие объемные, что хотелось
бы выводить их по одному и при этом, если потом
приспичит поменять дизайн, чтобы долго не
возиться. Мы делаем одну страничку (назовем ее faq.shtml),
оформляем ее как положено, а в том месте, где
должен быть ответ, пишем
<!--#include virtual="$(file)" -->
Учтите, что может быть, для вашего сервера надо
использовать не круглые, а фигурные скобки.
Теперь ответы на вопросы пишем каждый в своем html-файле,
в котором нет ничего, кроме текста да тегов, с ним
связанных (B, FONT и т.д), и желательно не
использовать атрибуты COLOR, чтобы потом не
мучаться.
Ссылки на ответы надо делать следующим образом
<a href="faq.shtml?file=url">
где url - адрес html-файла, содержащего ответ.
Теперь мы видим, какие данные нам передаются, надо назначить для их хранения переменные.
В принципе, весь сайт можно организовать по такому принципу. Если вы любите менять дизайн, то чтобы это сделать, достаточно будет изменить всего один файл - и вот у вас новый сайт.
Все это хорошо. Но хочется еще чего-нибудь похитрее. Если вы уже знакомы с SSI, дальше нового вы не узнаете, если нет - читайте.
В файлах SSI можно использовать
переменные. Они объявляются так
<!--#set var="name" value="value" -->
Передача данных
file.shtml?username=Alexey&birth=1974
эквивалентно
<!--#set var="username" value="Alexey" -->
<!--#set var="birth" value="1974" -->
Возможности по использованию этих бесценных сведений в SSI довольно ограничены, но мы можем попытаться с ними что-нибудь сделать.
Можно просто вставить
переменную в документ.
<!--#echo var="name" -->
Например, используя переданные ранее данные,
можно написать
Привет, <!--#echo var="username" -->
В результате чего на экране появится Привет,
Alexey
Пример посложнее. Если в файле написать
<!--#set var="title" value="заголовок" -->
то потом в вызывающем файле можно использовать
<title><!--#echo var="title" --></title>
Таким образом, мы можем передавать из включаемых
файлов в вызываемые различные конфиденциальные
сведения. Пользователь не видит инструкции SSI -
они обрабатываются сервером и передаются уже в
итоговом, "готовом к употреблению" виде.
Можно поизвращаться и попробовать проанализировать переданные данные и на их основе что-нибудь сделать.
Условные операторы выглядят
так
<!--#if expr="condition" -->
<!--#elif expr="condition" -->
<!--#else -->
<!--#endif -->
Элемент endif является обязательным. elif
можно повторять сколько угодно раз. После if и elif
пишется HTML-код, который будет подставляться при
истинности условия. После else пишется код,
который подставится, если ни одно из имеющихся
ранее условий не выполнилось.
Например
<!--#if $username="Alexey" -->
<h1>Привет, <!--#echo var="username" --></h1>
<!--#else -->
<h2>Привет, <!--#echo var="username" --></h2>
<!--#endif -->
Такой нехитрый код выводит приветствие, но если
человека зовут Alexey, буквы будут чуть-чуть
побольше.
В зависимости от ситуации а так
же различного программного обеспечения может
быть разным синтаксис написания имен переменных.
Если вы все сделали как тут написано и ничего не
вышло, попробуйте следующее:
Вставьте строку <!--#printenv -->
и посмотрите, есть ли вообще у вас хоть какие-то
переменные. Если есть, но использовать их не
получается, попробуйте другой способ написания :
"name"
"$name"
$name
"${name}"
"$(name)"
Один из них сработает.
Если у вас не работает даже printenv, Возможно, вам сначала нужно сделать из своего компьютера сервер. Самый простой способ - установить программу Small Http Server. Проста в установке и использовании, инструкция на русском языке. После установки сможете тестировать на своем компе CGI, SSI, PHP и т.д.