Магазин портативной техники "Портатив"
:: на главную
Web-мастеру > Юзаем $QUERY_STRING или Что такое SSI и с чем его едят II

Этой статьей хотелось бы открыть новый подраздел на DVK URL CLUB. "Ваша колонка" призвана собрать материалы и мнения наших посетителей. Первая статья написана нашим модератором раздела "Перекур" по мотивам одного из топиков на "Перекуре", в которой Александр поясняет некоторые особеннсти использования директив SSI. Так же автор хочет напомнить вам, что инструкциями SSI можно пользоваться только на том сервере, который их поддерживает. Большинство бесплатных хостингов в сети не выделяется такой особенностью, а попросту, не поддерживают SSI.

Преамбула
Суть и простейшие приемы в SSI уже были описаны на данном сайте. Как правило, на развалах статей по мастерингу редко встречается что-то кроме описание единственной функции "include" в самом простом варианте.

Однако SSI смело можно назвать языком программирования, пусть не полноценным, но языком. SSI позволяет определять условия и переменные, а также умеет работать с так называемыми переменными окружения, одной из которых является $QUERY_STRING, активно использующаяся при программировании на Perl, PHP, и других языках создания серверных скриптов. Здесь-то и начинается самое интересное.

Суть явления или результат который имеет Webmaster.
По большому счету речь сейчас пойдет о шаблонах. При очередном обновлении человеку обслуживающему сайт будет достаточно добавить ссылку на новую страницу в оглавлении и создать файл с обычным форматированным текстом без какой бы то ни было разметки. Согласитесь, что это весьма удобно :)

Технология: Условные директивы и переменная окружения $QUERY_STRING.
Вобщем, есть какой-то шаблон index.shtml, который представляет из себя следующее:

<html>
<head>
<title> :: Титул, блин :: </title>
</head>
<body>
<!-- здесь хедер, т.е. шапка, то что идет прежде контента -->
... Крутые теги и крутая графика ...
<!-- конец хедера -->

Тут, в принципе, проблем с пониманием не должно возникать, а вот далее — самое интересное. Поясню, что значение переменной $QUERY_STRING определяется содержимым строки запроса после знака "?", т.е. http://maste.ru/razdel/index.shtml?page1.
вторая и ключевая часть:

<!--#if expr="$QUERY_STRING" -->
<!--#include virtual="$QUERY_STRING.txt" -->
<!--#else -->
<!--#include virtual="default.txt" -->
<!--#endif -->

Я думаю, что нужна расшифровка. Мы имеем пять директив, из которых три относятся к условным, а две — обычные инклюдсы:
  1. Проверяется содержимое строки запроса на предмет наличия конструкции "?something" и в случае положительного результата выполняется вторая директива.
  2. Подключается файл с именем, идентичным содержимому строки, допустим, если строка запроса выглядит так: "http://maste.ru/razdel/index.shtml?page1", то подключается файл "page1.txt", лежащий в одной директории с индексным файлом.
  3. Исполняется в том случае, если содержимого вида "?something" в строке нет, а URL выглядит так: "http://maste.ru/razdel/index.shtml" или так: "http://maste.ru/razdel/", и преходит к исполнению четвертой директивы.
  4. Подключается файл по умолчанию, содержащий, как правило, оглавление раздела, т.е. ссылки на файлы раздела, которые должны выглядеть так: <a href="http://maste.ru/razdel/index.shtml?page1">ссылка на страницу №1</a> и т.д.
  5. Завершение условия.
Далее пойдет кол нижней части html-кода:

<!-- здесь футер, т.е. подвал, то что идет после контента -->
... еще немного Крутых тегов и крутой графики ...
<!-- конец футера -->
</body>
</html>

Как это будет работать?
В папку сваливаются файлы:
  1. index.shtml (типа терминал);
  2. default.txt (список ссылок <a href="http://maste.ru/razdel/index.html?page1">страница 1</a> и тэ дэ и тэ пэ и хэтэтэпэ :);
  3. файлы page1.txt, ..., page571756.txt пока не надоест, (в принципе название может быть любым, главное чтобы оно совпадало с содержимым после "?" в соответствующей ссылке).
Если предполагается использование директив SSI внутри рядовых файлов, то лучше их сделать так же .shtm, .shtml, и не забыть поправить разширения в коде файла index.shtml.

Вот! Юзайте на здоровье :)

Автор: Александр Александров (Alkeeper), mweb.ru

<< НАЗАД