Передача данных (1-й способ):
Данные передаются точно так же, как и для обычных 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 можно использовать переменные. Они объявляются так:
<!--#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 expr='"$username'="Alexey"' -->
<h1>Привет, <!--#echo var="username" --></h1>
<!--#else -->
<h2>Привет, <!--#echo var="username" --></h2>
<!--#endif -->
Такой нехитрый код выводит приветствие, но если человека зовут Alexey, буквы
будут чуть-чуть побольше.
Передача данных (2-й способ)
Можно передавать данные и средствами SSI. Плюс у этого метода в том, что он,
в отличие от первого способа, проходит незамеченным для пользователя. Чтобы
передать данные, надо их присвоить какой- нибудь переменной. Все переменные,
объявленные в файле, доступны и в вызываемых, и в вызывающих файлах. Но!!!
Само cобой разумеется, что надо сначала подключить файл, а потом
использовать имеющиеся в нем данные, а в подключаемых файлах использовать
можно только то, что имеется к моменту подключения.
Второй способ организации сайта:
Он немножко сложнее, но (имхо) прогрессивнее.
Все свои статьи пишем в формате html, но избегаем применения тегов, меняющих
цвет, и не указываем body. Сохраняем (допустим в файле text.html), и
запоминаем адрес этого файла. Никому его не говорим - он будет для сугубо
внутреннего использования.
Теперь создаем "публичный" файл для этой статьи, его мы будем заносить в
каталоги и рекомендовать знакомым. Он состоит всего из нескольких строчек.
<html>
<!--#set var="description" value="описание" -->
<!--#set var="title" value="Заголовок" -->
<!--#set var="keywords" value="ключевые слова" -->
<!--#set var="file" value="url статьи" -->
<!--#include virtual="файл интерфейса.shtml" -->
Как видите, мы указали в нем заголовок, ключевые слова, описание и
"приватный" файл, в котором содержится статья (text.html). Можно еще
написать то, что вы там еще обычно пишете в заголовке. Я чаще всего
ограничиваюсь одним title. Как-то спокойно отношусь к тому, что
релевантность маленькая окажется :-).
Теперь создаем файл интерфейса (*,shtml). Начало его выглядит так:
<html><head>
<title><!--#echo var="$title" --></title>
<meta name="description" content="<!--#echo var="$description" -->">
<meta name="keywords" content="<!--#echo var="$keywords" -->">
</head>
Далее оформляем внешний вид - вешаем баннеры, вставляем счетчики, добавляем
новости и т.д. Наконец в том уголке, где должна быть статья, пишем
<!--#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 есть, но при
попытке передать несколько значений в переменной сохраняются и знак
равенства, и амперсант (&), значит сервер не выполняет предварительный
анализ входящих данных и не воспринимает передаваемые значения как пары
переменная-значение.
Источник: Школа
начинающего Юзера