Если ваш сайт велик (содержит много страниц), то имеет смысл организовать поисковую систему или карту сайта.
Здесь мы рассмотрим один простой вариант такой системы, который я сам использовал на своем сайте. Он основан на использовании базы данных в текстовом файле, управляемой элементом ActieX STD.
Этот элемент встроен в IE, начиная с версии 5.0. Более подробно о нем см. пример Простые базы данных.
В основе поисковой системы находится база данных (БД), содержащая соответствие между поисковыми образами и ссылками на Web-страницы.
Я создал такую базу в обычном текстовом файле с именем search.txt. Как создавать и показывать на Web-странице подобные БД рассказано на данном сайте (см.).
В нашей поисковой БД всего два столбца: p1 и p2. Первый столбец содержит поисковые образы - слова, которые может вводить пользователь в поле ввода.
Второй столбец содержит ссылки на HTML-документы. В качестве разделителя столбцов я использовал вертикальную черту |.
БД в текстовом файле легко поддерживать (редактировать). Во втором столбце я записал тэги ссылок. Однако я мог бы записать туда и другие тэги.
БД - текстовый файл (в примере - search.txt)
Нужно как следует продумать систему поисковых образов, чтобы поиск был эффективным.
В рассматриваемом примере поиск не зависит от регистра введенного поискового образа. Система просматривает БД, строка за строкой, проверяя, содержится ли введенный пользователем поисковый образ в 1-м поле БД. Если да, то поиск завершается, иначе он продолжается.
Результат поиска выводится в виде таблицы: первый столбец - релевантная ссылка, а второй - множество всех слов, соответствующих этой ссылке (т.е. в обратном порядке по сравнению с БД).
При желании этот столбец можно не выводить. Если поиск неудачен, то ниже поля ввода появится соответствующее сообщение. Кроме поиска слов имеется возможность вывода всей поисковой БД.
Пример поиска по сайту
Посмотрите HTML-код данного примера.
Подробно его описывать я не буду. Сделаю лишь несколько комментариев общего плана.
Для работы с БД использованы два идентичных элемента ActiveX (называемых Simple Tabular Data, STD).
К каждому из них привязана своя таблица. Одна из них, невидимая, нужна для служебных целей, а именно для операции поиска по всей БД. Вторая таблица предназначена для показа результатов поиска.
Такой наворот обусловлен тем, что стандартные для элемента STD средства фильтрации слишком примитивны (выражение фильтра может иметь только такой вид: < имя_столбца >< операция_сравнения>< значение).
Кроме того, мне не хотелось сбрасывать фильтр перед каждой операцией поиска.
Обратите внимание, что используя в БД другие тэги (не только тэги ссылок), можно изменить назначение всей поисковой системы.
А теперь сделаем так, чтобы система поиска сканировала все записи базы данных и выводила в качестве результата все ссылки, соответствующие поисковому образу, а не только одну первую найденную.
Для осуществления этого замысла нам потребуется один элемент управления STD и одна невидимая таблица с двумя полями p1 и p2. Фильтрация данных нам не понадобится.
Вместо нее мы просто будем формировать строку, содержащую найденные ссылки, которую затем присвоим свойству innerHTML объекта result. При этом код даже упрощается по сравнению с рассмотренным выше.