Псевдо
SSI - возможно ли такое? Да вполне! Итак, представим
себе довольно распространенную проблему - отсутствие
хостинга с возможностями SSI. Знакомо? То-то!
Иными словами вас мучает вопрос, как реализовать
некоторые (все, к сожалению нельзя) возможности
технологии Server Side Include при полном отсутствии
таковых возможностей. На самом деле это не такая
уж и проблема. Конечно, полностью заменить эту
прекрасную особенность хороших серверов невозможно,
но кое-что я посоветую.
Для
начала давайте разберемся, в чем же главная прелесть
SSI. Она состоит в том что, имея возможность (в
дословном переводе) включать на стороне сервера
некоторые инструкции в вашу HTML страницу вы получаете
мощный инструмент для управления всем вашим сайтом
вообще! Т.е. например, у вас есть блок HTML кода,
который повторяется на всех страницах вашего сайта
(это может быть меню). Естественно было бы интересно
сделать этот блок внешним, т.е. получить возможность
изменять его в каком либо отдельном от остальных
страниц сайта месте с тем, чтобы это изменение
отразилось на всех страницах одновременно. Это
позволило бы вам с легкостью вводить новые разделы
и даже (если в таком блоке находятся шапки вашего
сайта) менять дизайн всего сайта что называется
"на лету".
К вашему (и конечно моему тоже) сожалению сервер, на котором вы держите свой сайт, не позволяет делать этого - не беда. Вы уже находитесь на таком. Как известно Narod.ru не поддерживает клиент-серверные технологии.
Итак, давайте представим себе некоторый сайт, имеющий, например страницы с такой структурой:
Пример 1
<html>
<head>
<title>Мой сайт</title>
</head>
<body>
<!-начало меню -->
<a href=first.html>первая страница</a>
<a href=second.html>вторая страница</a>
<!-конец меню -->
<!- основное содержание -->
Всем привет - это мой сайт
<!-конец основного содержания -->
</body>
</html>
Что бы мы сделали, будь у нас возможность использовать SSI? Мы
сделали бы так:
Пример 2
<html>
<head>
<title>Мой сайт</title>
</head>
<body>
<!-начало меню -->
<!--#include virtual="insert.html" -->
<!-конец меню -->
<!- основное содержание -->
Всем привет - это мой сайт
<!-конец основного содержания -->
</body>
</html>
При этом файл insert.html, должен выглядеть вот так:
<a href=first.html>первая страница</a>
<a href=second.html>вторая страница</a>
При этом при обращении к данной странице сервер на котором она
находится вставит в нее текст содержащийся в файле insert.html, а
затем передаст страницу браузеру… При этом при просмотре кода данной
страницы вы увидите код в точности соответствующий
Примеру 1.
Но как я уже отмечал у нас нет такого "грамотного"
:) сервера. Поэтому, для решения той же задачи,
мы можем воспользоваться вставкой не на уровне
сервера, а на уровне браузера, используя технологию
внешних файлов JavaScript:
Пример 3
<html>
<head>
<title>Мой сайт</title>
</head>
<body>
<!-начало меню -->
<script language=javascript src="insert.js">
</script>
<!-конец меню -->
<!- основное содержание -->
Всем привет - это мой сайт
<!-конец основного содержания -->
</body>
</html>
Сам же файл insert.js, должен выглядеть вот так:
<!--
document.write("<a href=first.html>первая страница</a>");
document.write("<a href=second.html>вторая страница</a>");
//-->
Внимание! Команды "document write " в Java Script- это строковые константы, поэтому они должны писаться только в строчку, какой бы длинной она не была!
Еще одно замечание. В этой команде не должно содержаться ни одной кавычки «"» кроме тех, которые стоят около скобок начала и конца команды. В значениях атрибутов тегов нужно ставить «'»или вообще писать значения без кавычек!
Как видно из приведенного примера размер файла вставки
увеличивается, да и сам файл усложняется и это плохо - но зато мы,
во-первых, добиваемся того же эффекта, как и в случае с
Примером 2, а во вторых получаем дополнительную
возможность вынести в этот файл какие-либо скрипты, необходимые для
управления страницей… При этом при просмотре кода страницы, он
останется таким же как и в Примере 3.
|