Титульная страница
ISO 9000 ISO 14000 Forum
Титульная страница
Цель системы качества
Управление качеством
ISO
ISO 9000
ISO 13485
ISO 14000
ISO 17025
OHSAS 18001
ISO 19011
Total Quality Management
Project Management
Фармацевтика
Отраслевые стандарты
Информационные технологии
Оформление документации
Ссылки 
Поиск на сайте
Forum
Реклама на сайте





SSI

Часть 2.

Эта статья рассказывает всем тем, кто уже ознакомился со статьей по основам SSI, что еще можно сделать с помощью SSI. Остается только добавить, что SSI довольно сильно нагружает сервер, и лучше пользоваться им аккуратно :)


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

Введение

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

Введение(2)

Идея SSI заключается в следующем: на каждом сайте есть элементы оформления, повторяющиеся на всех страничках этого сайта. Например, описание основных параметров (body), CSS, оглавление, скрипты и т.д. Нет смысла, подумали умные люди, писать одинаковые фрагменты кода в каждой странице. Можно написать их один раз, сохранить в отдельном файле и вставлять в другие по мере необходимости. Вставка содержимого одного файла в другой производится директивой include.

<!--#include file="file.html" --> или

<!--#include virtual="URL" -->

Первый случай используется при подключении файла, находящегося в том же самом каталоге, второй – для подключения файла, находящегося в любом месте, даже на другом сервере. (Но не все бесплатные сервера разрешат вам подключить файл, находящийся на другом сервере). Все говорят, что предпочтительнее использовать virtual, и я не буду спорить. В этом случае можно использовать как относительные, так и абсолютные адреса. Само собой разумеется, что подключаемый файл тоже, в свою очередь, может содержать директивы SSI. Обратите внимание: пробелы есть только после слова include и перед -->. Желательно, чтобы файл, в котором есть директивы SSI, имел вид name.shtml, где name – любая комбинация латинских букв, цифр и знаков подчеркивания. На некоторых серверах разрешают вставлять директивы SSI и в файлы с расширением *.htm, *.html.

Данные

Для хранения данных существуют переменные. Они объявляются так:

<!--#set var="имя" value="значение" -->

Передача данных

Передавать данные можно двумя способами. Даже тремя.

  1. Используя метод get формы.
  2. Через URL вызываемого файла в виде
    file.html?param=value[&param=value].
  3. Используя возможности SSI.

В принципе, первые два различаются лишь тем, самостоятельно будете вы кодировать строку запроса (2-й способ) или предоставите это делать пользователю (1-й способ), который будет заполнять форму и жать на ОК или SUBMIT. Этот способ рассмотрен мною подробно в другой статье. Для передачи данных средствами SSI достаточно объявить переменную и присвоить ей значение. Теперь она доступна из любого файла, подключающего данный.

Получение данных

Получить и затем использовать данные можно двумя способами.

  1. Стандартными средствами DHTML (HTML+JavaScript)
  2. Средствами SSI.

Первый способ рассмотрен все в той же статье "Передача данных…", да и не интересует он нас сейчас. А вот средствами SSI получить данные можно опять-таки двумя способами.

  1. Данные, содержащиеся в переменных, которые мы объявляли в подключаемых файлах, уже можно считать полученными и с чистой душой и спокойной совестью можно приступать к их использованию.
  2. Если вы самостоятельно сформировали строку запроса так, как описано выше, или передавали данные из формы, это равносильно объявлению переменных. То есть строка file.shtml?param=value эквивалентна объявлению переменной param, равной value.

<!--#set var="param" value="value" -->

Чтобы проверить, передались ли вам какие-либо данные или нет, есть директива

<!--#printenv -->

Она выводит на экран список всех переменных и их значения.

Обработка данных

Нет смысла передавать данные и не использовать их потом. Разве что делать это с целью заморочить голову посетителю. Самое простое, что можно сделать, это вставить переменную в текст документа.

<!--#echo var="$name" --> - просто вставит значение переменной в текст документа. Допустим, в переменной url содержится адрес какого-то файла, на который надо организовать ссылку, тогда это выглядит так

<a href="<!--#echo var="$url" -->">Ссылка</a>.

Или, например, посетитель сказал нам, как его зовут, нажал на кнопочку, и на следующей странице к нему будем обращаться по имени. Строка запроса у нас получилась
file.shtml?name=Alexey и используем мы эти бесценные сведения

Привет, <!--#echo var="$name" -->.

В результате на экране отобразится Привет, Alexey.

Если передавались данные, требующие аналитической обработки, на это есть директива if.

<!--#if expr=(условие) -->

<!--#elif expr=(условие) -->

<!--#else -->

<!--#endif -->

endif является обязательным элементом. elif может повторяться сколько угодно раз. else между if и endif может быть лишь единожды, причем после else уже не может использоваться elif. После каждого условия можете вставлять неограниченное количество строчек кода HTML. Например, предыдущий пример (с именем) можно модернизировать

<!--#if expr=($name="Alexey") -->

<h1>Привет, <!--#echo var="$name" --></h1>

<!--#else -->

<h2>Привет, <!--#echo var="$name" --></h2>

<!--#endif -->

Теперь, если посетитель окажется моим тезкой, приветствие будет написано чуть крупнее, чем для всех остальных.

Организация сайта

Наконец-то я добрался до того, ради чего и затеял-то писать эту статью. Мы же хотим организовать свой сайт так, чтобы в случае чего модернизация заняла бы минимум усилий. Возможны два пути для достижения этой цели. Видите, какой я нынче демократичный – всегда предоставляю вам право выбора. Цените это J . Следует учесть, что HTML – очень терпимый к ошибкам язык. Если вы что-то неправильно написали, к фатальным последствиям это не приведет. Так, например, не смотря на то, что во всех руководствах заголовок документа (head) рекомендуют писать в начале файла, броузеры правильно понимают его в любой части документа, даже если вы забудете заключить его в контейнер <head>. Единственное (имхо) неудобство заключается в том, что, располагая заголовок, содержащий title, в конце файла, страница броузера остается безымянной до тех пор, пока не прочитает этот заголовок.

Способ первый

Пишем статью в формате HTML, как обычно, но не указывая никакие стили, избегая изменения цветов (потому что мало ли какой цвет фона нам потом приспичит сделать – вдруг видно не будет) и даже опуская тег body. Остаются только font size, b, big, img, a, i, table и некоторые другие. Сохраняем как filename.html. Имя, естественно, у каждой статьи разное. Самое главное – запомнить, в каком файле какая статья лежит, а лучше записывать это. Адрес этой статьи никому не говорим – он для сугубо внутреннего использования.

Далее создаем публичный файл статьи. В начале документа пишем <html> и затем объявляем переменные, в которых будем передавать информацию о статье

<html>

<!--#set var="description" value="описание" -->

<!--#set var="title" value="Заголовок" -->

<!--#set var="keywords" value="ключевые слова" -->

<!--#set var="file" value="url статьи" -->

<!--#include virtual="файл интерфейса.shtml" -->

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

Теперь создаем файл интерфейса (*,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" -->

Все. Теперь, как и обещалось, для радикального изменения дизайна достаточно изменить лишь наш файл интерфейса.

Способ второй

Честно говоря, он мне не очень нравится, и поэтому я его приводить не буду. Идея его заключается в том, чтобы вызывать все статьи как, например, index.shtml?sub=filename. Выигрыш можно получить в том, что одна и та же статья теперь имеет два адреса. Кому интересно, можете сами организовать такую структуру.

Заключение

Некоторые тонкости. Обращение к переменным я делал как "$name". На сервере, где мой хоумпейдж, работает именно так. На других может быть "${name}" (скорее всего) или как-нибудь по-другому (маловероятно).

При тестировании дома могут возникнуть сложности. Для получения данных нужен сервер. Если у вас не стоит Apache или какой-нибудь другой и вы не хотите его ставить, и не надо. Есть хорошая программка Small HTTP Server (около 60кб). Последний раз я видел ее по адресу http://wwwkoi.wplus.net/pp/mrdoors/srv/rdesc.htm. После установки вы сможете тестировать дома CGI, SSI, PHP и т.д.

Rambler's Top100
Hosted by uCoz