В предыдущей статье я рассказал вам о том, как с помощью JavaScript к
HTML документам можно подключать код, содержащийся в отдельном файле.
Таким образом, повторяющиеся елементы сайта (меню, ссылки, адреса почты
и прочее) можно вынести в отдельный файл и подключать его к нужным
страницам. После переноса части кода страниц в отдельный файл
меньшается общий размер документов сайта, а изменение повторяющихся
пунктов сводится к редактированию и загрузке на сервер одного-единого
файла.
Ну вот, казалось бы, чего еще желать? А ненасытным вебмастерам все
мало. Теперь они хотят построить весь сайт на одном шаблоне! А почему
бы и нет? Ведь дизайн страниц в пределах сайта не изменяется, меняется
лишь содержание страниц. Стоит лишь в нужный момент подставить нужный
адрес файла, содержащего код, который необходимо вставить. А вот как
сделать, чтоб один шаблон, скажем файл dat.html менял имена
подключаемых файлов и как следствие свой вид и информацию? Такая задача
легко решается с приминением условий и параметров.
Итак, нам нужно каким то образом передать странице dat.html один или
несколько параметров и в зависимости от принятых параметров подключать
тот или иной файл. Передавать параметры будем через адресную строку,
например: dat.html?id=101 Далее мы детально рассмотрим ее. Теперь нам
надо написать процедуру обработки адресной строки для того, чтобы можно
было извлечь значение параметра. Поскольку данная процедура в будущем
опять же может нам понадобится в других документах, давайте разместим
ее в отдельном файле bild.js:
function GetParam(search, name){
name=name+"=";
var gp="";
if (search!='') {
if (search.indexOf (name, 0)!=-1){
var startpos=search.indexOf(name, 0)+name.length;
var endpos=search.indexOf("&",startpos);
if (endpos<startpos) {endpos=search.length;}
var gp=p.substring(startpos,endpos);
} else {
gp=""; }
}
else {
gp="";
}
return gp;
}
var p=window.location.search;
var gp=GetParam(p, "id");
if (gp=="") {gp="default";}
document.write('<img src="'+gp+'.jpg">');
Вкратце о работе процедуры: мы ищем значение параметра с именем id, переданого в адресной строке в формате:
Как видно имя документа отделяется от параметров знаком вопроса. После
чего идет имя параметра и его значение, между ними знак равенства.
Имена параметров разделяются знаком амперсанд - &. То есть можно
добавлять обработку неограниченого числа параметров. В нашем примере
процедура ищет значение только одного параметра с именем id:
var gp=GetParam(p, "id");
Если параметра нет, присваиваем ему значение "default":
if (gp=="") {gp="default";}
После этого можем использовать значение параметра, например, вставить в документ строку, отображающюю соответствующюю картинку:
document.write('<img src="'+gp+'.jpg">');
Вот собственно и все. Работу самой процедуры поиска рассматривать не
будем, и так все понятно, а кому нет – пусть мне напишет, помогу
разобраться.
При открытии страницы будет отображен рисунок, содержащийся в файле
default.jpg (так как параметр задан не будет). Но стоит выбрать один из
пунктов меню выпадающего списка и нажать на кнопку "Смотреть" и тут
откроется выбраная картинка. Как видно из листинга, при выборе пункта
меню "Рисунок 1", документу dat.html будет передан параметр id равный
"pic1". После чего в подключаемом файле bild.js значение параметра
будет подставлено в строку:
вследствии чего в документе dat.html будет отображет рисунок с именем
значение_параметра.jpg (в нашем случае pic1.jpg). Конечно, никто не
мешает передавать в параметре полное имя файла (особенно полезно когда
файлы разные - jpg, gif, bmp...) или даже целые строки HTML кода.
Функция mov в dat.html служит лишь для перехода по выбраной в вписке
ссылке.
Вот мы и рассмотрели такой не сложный, но очень полезный механизм. И
это лишь простой пример. Сегодня для вас есть домашнее задание:
модифицируйте код, добавив кнопки "Вперед" и "Назад" для просмотра
картинок.
И в заключении моего небольшого рассмотра возможностей JS по
подключению внешних файлов хочу рассказать о некоторых приемуществах и
особеностях использования таких вставок.
Одно из самых главных приемуществ данного метода по сравнению с
использованием SSI для вставок данных в документ является его скорость.
Да, да именно скорость. Если на страницах сайта использовать одну и ту
же вставку на JS, то она будет загружаться только один раз - при первом
посещении сайта (и разумеется если вставка будет изменена). В
последствии при дальнейшем серфинге по сайту вставка будет подгружаться
из кеша броузера тоесть с винта посетителя. Этот факт явно ускорит
загрузку страницы. Таким методом можно сократить часть загружаемой с
сервера информации в несколько раз!
Замечательная возможность - размещение любых данных, доступных по HTTP
протоколу на любых страницах. Достаточно разместить на сайте строку:
<script src="http://адрес_документа"></script>
и его код будет вставлен в документ при его просмотре. Единственое что
- подключаемый документ должен быть оформлен командами document.write -
для текста. Разумеется, допустимо наличие в подключаемом документе JS
кода, только уже без команд document.write Таким образом можно
разместить много информации, занимающей мало места. Вспомним информеры.
Они, как правило, графические – "весят” много, но информации несут
мало. А вот если оформить их в виде таблицы на JS вставке, то грузиться
они будут мгновенно. Кроме того, такая вставка не будет бросаться в
глаза, и нарушать дизайн сайта.