Home
Главная
Forums
Форум
Your Account
Ваш аккаунт
Web-технологии
HTML, XML, DHTML
JavaScript
SQL
PHP
Perl
SSI
ASP
CSS

Графика
Adobe PhotoShop
Adobe PhotoShop - 2
Macromedia Flash

Компьютеры
Hardware
Мобильные технологии
КПК и ноутбуки

Операционные системы
Unix/Linux
Windows 9x
Windows XP

Стоит посмотреть
  • ООО "Окна Мастер": пвх профиль окна; пластиковые окна Москва.


  • Переезд: квартирный переезд грузоперевозки москва квартирные переезды .






  • SSI (часть 2)

    Работа с переменными

    Переменной в SSI считается любая строка, а также любая внутренняя переменная окружения. Для работы с переменными предусмотрены следующие команды:

    echo - выводит значение ранее установленной переменной SSI. Допустимым атрибутом является var, в котором определяется сама переменная, значение которой будет выводиться. Переменная SSI - это какая-то строка, которая при подстановке в документ образует правильную структуру, будь то тэг или его атрибут, либо еще что-нибудь.

    set - устанавливает значение переменной. Ее атрибутами являются var, определяющий имя переменной, и value, определяющий ее значение.

    Здесь следует дать некоторые пояснения, зачем вообще нужны переменные в SSI. Нужны они лишь для того, чтобы автоматически подставлять какие-то строковые значения в тэги, тем самым их изменяя. Например, мы определили следующую переменную:

    которая обозначает какое-то значение заголовка документа. Использовать мы ее можем следующим образом:

    <!--#echo var="I_TITLE" -->

    При этом документ, в котором будет использована данная строка, получит именно такой заголовок. Следует отметить, что между тэгами , помимо SSI-команды, вывести переменную I_TITLE, могло быть еще что угодно, вплоть до еще одной переменной. Здесь особых ограничений не существует. В этом случае мы получили бы просто заголовок, составленный из двух или более строк.


    Переменные включения

    В дополнение к стандартным переменным окружения CGI, модуль SSI делает доступными для директив и условий, а также для вызываемых через SSI-сценариев следующие переменные:

    DATE_GMT - текущее время по Гринвичу;

    DATE_LOCAL - текущее локальное (для сервера) время;

    DOCUMENT_NAME - имя файла (без каталогов) документа, запрошенного пользователем;

    DOCUMENT_URI - декодированный URL запрошенного пользователем документа;

    LAST_MODIFIED - дата последней модификации документа, запрошенного пользователем. То есть, во вложенном SSI эта переменная будет содержать имя "главного" документа, а не вложенного.

    printenv - выводит содержимое переменных окружения. Вызывается без параметров.

    Важно отличать переменные окружения от отдельных строк. Для этого в SSI принято их записывать со знаком доллара впереди, а простые строки должны быть обрамлены в кавычки, таким образом $ LAST_MODIFIED - это переменная окружения, а "LAST_MODIFIED" - это обыкновенная строка.


    Условные операторы

    Для динамического формирования внешнего вида загружаемых документов, в зависимости от действий пользователя либо просто от свойств самого документа, в SSI существуют условные операторы или контролирующие элементы, назначение которых заключается в выполнении каких-то действий в зависимости от условия, определенного разработчиком страницы. На сегодняшний день условные операторы являются единственным элементом программирования, используемым в SSI. Базовыми элементами контроля являются следующие директивы:

    - проверяет условие test_condition, и в случае его верности выполняет все последующие операции, определенные SSI-директивами до строки . В обратном же случае все находящееся между этими двумя операторами игнорируется и программа сканирует документ далее, в том случае, если внутри игнорируемой области не определены какие-либо другие операторы выбора.

    - если вставляется в документ, то всегда должно следовать за . Использование по отдельности, как можно догадаться из смысловой нагрузки, для данной директивы не предусмотрено. Начинает действовать в случае, если условие в первом до нее операторе if явилось ложным. Тогда данная команда проверяет свое условие test_condition, не обязательно совпадающее с условием вызывающей директивы, и в случае, если оно имеет значение "правда", вызывает какое-либо действие, описываемое директивой далее в документе до следующего элемента .

    - если кто-то знаком с языком программирования Javascript или Java, то поймет, что этот оператор имеет примерно такой же смысл, как switсh(default()). Другими словами, он выполняется только тогда, когда все операторы , следующие до него, не дали желаемого результата. Пишется всегда на заключительной стадии оператора if прямо перед .

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

    При записи условных операторов в SSI полезно помнить следующий набор правил и свойств переменных.

    Элементы elif и else являются необязательными.

    Элемент endif заканчивает элемент if и является обязательным.

    test_condition может быть одним из следующих:

    string - истинно, если string не пуста;

    string1 = string2 - истинно, если первая строка соответствует второй.

    string1 != string2 - истинно, если первая строка не соответствует первой.

    string1 < string2 - истинно, если первая строка меньше второй.

    string1 <= string2 - истинно, если первая строка либо соответствует второй, либо меньше ее.

    string1 > string2 - истинно, если первая строка больше второй.

    string1 >= string2 - истинно, если первая строка либо соответствует второй, либо больше нее.

    Если string2 записывается в форме /string/ то тогда она интерпретируется как регулярное выражение. Их синтаксис аналогичен синтаксису регулярных выражений в Unix команде egrep;

    string - это практически любая строка, содержащая либо тэг целиком, либо его часть либо код какого-либо скрипта, в общем, любую часть документа. Так же это может быть любая переменная окружения, определенная в самом SSI либо в CGI-скрипте, совместно с которым используется документ.

    Так же, как в полноценном языке программирования, условные операторы в нашем случае содержат возможность применения к их переменным ряда логических операций. В этом случае мы имеем следующие возможности по изменению истинности выражений.

    ( test_condition ) - истинно, если test_condition истинно;

    ! test_condition - истинно, если test_condition ложно;

    test_condition1 && test_condition2 - истинно, если как test_condition1, так и test_condition2 истинны;

    test_condition1 || test_condition2 - истинно, если хотя бы test_condition1 или test_condition2 истинно.

    "=" и "!=" имеют больший приоритет, чем "&&" и "||", а "!" имеет наивысший приоритет.

    Важно запомнить! Все, что не распознается, как переменная, считается строкой. Если строка имеет пробелы или символы табуляции, то ее надо заключать в кавычки.


    Подстановка переменных

    Переменной в SSI считается строка любого типа или зарезервированные переменные окружения. Так же, как и в языке Perl в SSI, переменные инициируются с помощью знака доллара($). Подстановка переменных производится внутри заключенных в кавычки строк в большинстве аргументов SSI-директив. В этих случаях знак доллара можно вставить, предварив его слэшем:

    Для предотвращения двусмысленности можно заключать имя переменной в фигурные скобки:

    В результате такого присвоения, переменная Zed будет иметь значение "Xbc_Y", если переменная a равна X, а переменная abc равна Y.

    Используются подобные сложные структуры довольно редко, так как относятся больше к изощрениям с использованием зарезервированных возможностей, однако ради интереса и для большей ясности последние объявления следует немного пояснить.

    Представим, что у нас в каком-то стороннем файле - пусть он называется storon_X.shtml - существует следующий набор директив:

    Все их действие заключается в установке двум строковым переменным (_title и __title) определенных значений, которые потом предполагается использовать на месте заголовка какого-либо документа. Также предположим, что у нас есть еще один сторонний документ (назовем его storon_X2.shtml), который в своем заголовке должен иметь следующую строку текста: "Программы на языках высокого уровня Различные навороченные фишки Обзоры новейших генераторов html-кода". Тогда, чтобы сформировать переменную такого вида уже в самом текущем документе, нам понадобится объявление типа:

    Все это имеет смысл, если у нас есть еще один сторонний фаил (этот пусть называется просто XXX.shtml), который в своем заголовке содержит строку "Программы на языках высокого уровня Еще много чего крутого". Тогда в нем объявление соответствующей переменной будет выглядеть следующим образом:

    Таким образом, для формирования сразу двух заголовков различных файлов мы можем использовать один лишь storon_X.shtml. Конечно, для того чтобы все заработало, надо не забыть включить в них обоих следующую незамысловатую строку:

    Пример этот является абсолютно бесполезным, однако же при этом довольно наглядно поясняет некоторые теоретические сведения, изложенные в этой статье.


    Что дальше?

    На самом деле, значение SSI трудно переоценить. Хотя технология и является еще довольно недоработаным продуктом, но уже сегодня можно смело сказать, что она значительно облегчает жизнь многим людям, так или иначе имеющим отношение к вэб-дизайну. Вот предположим, что у нас есть серия документов, содержащих каждый по одной какой-либо картинке. Причем, в каждом картинка своя, со своими размерами и, соответственно, содержанием. Более того, документы отличаются друг от друга по своему заголовку и ключевым словам, по которым ищет их поисковая система. Представим также, что таких документов на нашем сервере больше, чем волос на голове у Ленни Кравитца.

    Как бы то ни было, согласимся, что писать для каждого из таких документов свой отдельный html-код, по меньшей мере, самонадеяно. Хотя, конечно, найдутся, как всегда, вполне вменяемые люди, которые закричат, что, мол, они такое делали, и не раз. Спорить с ними на эту тему бесполезно - лучше согласиться. Такие люди остро нуждаются в понимании, сочувствии, а может быть, даже длительном лечении. Как бы то ни было, для всего остального прогрессивного человечества будет гораздо легче использовать SSI.

    Советовать что-либо для самостоятельного изучения не буду, все пишут в общем-то одно и то же, за исключением разве что порядка слов в предложениях. Статья была призвана не столько описать достаточно еще молодую технологию, сколько ввести читателя в курс дела. И если кто-то заинтересовался, то сам найдет все, что ему нужно.



    Дополнительно на данную тему:

    SSI в примерах
    SSI (часть 1)
    Учебник по SSI (Server Side Includes)
    Мощь SSI
    SSI: вкусно и полезно
    CGI+SSI - пример счетчика

    Назад | Начало | Наверх
    Rambler's Top100