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