Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.51/77: Рейтинг темы: голосов - 77, средняя оценка - 4.51
Сура
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 14
1

Как сделать простейший поиск по сайту на html без баз данных

30.03.2015, 02:30. Просмотров 15314. Ответов 38
Метки нет (Все метки)

Добрый день.

Как новичок в вопросе, понимаю, насколько тяжело объяснять таким как я примитивные вещи.

Я делаю сайт уже более 10 лет. Несколько лет назад перевёл всё в HTML5. Сайт пишу сам, ручками в блокноте, ничего другого не использую. Сайт на самом деле весьма крупный и посещаемый, но ничего более HTML я за эти годы не освоил, ну как-то не требовалось, ведь сайт чётко структурирован, типичный Web 1.0, никакого взаимодействия с пользователями не предусматривалось. Баз данных никаких нет, сайт - более 900 статических страниц формата .htm Для удобства использую, естественно, CSS и SSI, так что если что изменить надо - проблем тоже нет. Благодаря помощи вставил одну страничку PHP для вывода рандомной информации в одном из разделов.

Теперь вот захотелось следующее:
прикрутить к сайту поиск, но не Яндекс (Гугл), не по таблицам (которых нет) и не по тексту страниц (нафиг не надо).
Суть простейшая до невозможности:

Пример: есть страницы под названиями АБВ, ГДЕ, и ЖЗК (и ещё 900 штук)
Нужна кнопка поиск, работающая так: пользователь вводит нужную ему страницу в формате, например ГДЕ.
Я делаю страницу с таблицей с простейшим соответствием запроса нужному файлу. То есть сам вручную пишу, что если введено ГДЕ, то открывается страница ГДЕ.htm Все поправки на ошибки вбиваю туда же, то есть если я знаю, что вместо ГДЕ пользователь часто пишет ГДЁ, то я и вобью в таблицу все нужные значения.

Вот собственно и всё. Я прилежно прочитал пару десятков тем с подобными вопросами, но нигде инструкции, как же именно это сделать не нашёл. Понимаю, что плохо искал, наверное. А сам написать подобное я не в состоянии.

Может оно вообще не надо? Но пользователи просят.

Добавлено через 2 часа 34 минуты
Копался и в темах, и на сайтах-базах бесплатных скриптов - без толку. Потому что предлагается поиск, то есть программа сама ищет соответствие по страницам, а этого не надо. Надо то простое перенаправление пользователя, чтобы он мог вписать в окно запроса - хочу на страницу про А и по нажатии кнопки попасть на страницу А.htm
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2015, 02:30
Ответы с готовыми решениями:

Как сделать поиск по сайту с базой данных на xml
Здравствуйте. Есть сайт, хотел обновить на нем поиск. Сейчас он работает таким образом, что при...

Как сделать простейший аккордеон HTML +CSS (без JS)?
Без всяких наворотов стилей (по клику). текст ⯆ -> текст ⯅ подтекст1 подтекст2 подтекст3 ...

Нужно сделать поиск по сайту с помощью JS и HTML
ПОМОГИТЕ! Нужно сделать поиск по сайту с помощью JS и HTML. Типа: 3 фрейма, один скрыт. Скрипт...

Поиск записи в программе по различных полям без использования баз данных
Всем привет! Нужна помощь новичку. Пытаюсь в С++ Builder 2009 создать простую программу для...

как сделать простейший поиск элементов списке
• При взятии каждой книги вводится номер УДК и программа уменьшает количество книг на 1 или выдает...

38
Trukl
Заблокирован
30.03.2015, 02:38 2
У меня был сайт на 8 страниц HTML и я его редактировал вручную. Это был монотонный мартышкин труд. Как редактировать 900 страничный ресурс в ручную в одиночку, я боюсь себе даже представить.
Что касается темы вопроса, то на мой взгляд, если знаний будет достаточно для написания такого поиска. То ты и так без проблем переведёшь свой ресурс на PHP полностью. И это того будет стоить. А реализовывать эту задачу в том виде в котором она поставлена, это .... даже не знаю как культурно выразится.
0
Dealiss
293 / 281 / 84
Регистрация: 10.05.2013
Сообщений: 920
30.03.2015, 06:09 3
Сура, если верно понял Вас, тогда нужно использовать функцию scandir() и через цикл прогнать полученный массив. Дальше делать соответствующие манипуляции.
Или же просто использовать функцию file_exists();
http://php.net/manual/ru/function.scandir.php
http://php.net/manual/ru/function.file-exists.php
0
Jodah
Эксперт PHP
3137 / 2680 / 1131
Регистрация: 01.08.2012
Сообщений: 9,389
30.03.2015, 09:11 4
Цитата Сообщение от Сура Посмотреть сообщение
Я делаю сайт уже более 10 лет.
Цитата Сообщение от Сура Посмотреть сообщение
ничего более HTML я за эти годы не освоил


Потратьте пару дней на изучение взаимодействия php с mysql и забудьте про эти 900 страниц. Это жесть.
0
30.03.2015, 09:11
Сура
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 14
30.03.2015, 11:47  [ТС] 5
Спасибо. Я, конечно, понимаю, что на форуме PHP все будут советовать переделать сайт на PHP ) Я этого ожидал. Но, честно, я не готов на такую революцию. Имеющиеся средства вполне позволяют быстро поменять нужную мне часть сразу на всех требуемых страницах без подключения баз данных. А редактирование конкретного текста конкретной страницы в коде мне всегда удобнее, чем через админку - ну привычка уже. Поскольку сайт не представляет собой однородный массив данных (это не товар1, товар2, товар3 и т. д.), то смысла для меня нет. Да и с индексацией могут быть проблемы.

Что до ссылок - проблема в том (и видимо в моём консерватизме), что все эти функции предполагают самостоятельную работу движка, то есть это некий бот, который делает скан массива и что-то оттуда выуживает. А мне этого не надо. Мне надо всё контролировать самому То есть я сам ручками пишу страницу соответствия предполагаемого запроса в поиске и предполагаемого перехода. Выдачи результатов не надо, нужен сразу переход, соответственно, однозначный результат. Просто, например, я пишу об объекте Абв. Раньше этот объект назывался Эюя, и многие пользователи продолжают его искать так. Но никак по-другому он не назывался. Соответственно, в окно поиска я пишу подсказку, типа: введите название требуемого объекта. Пользователь вбивает "Абв". Страница соответствия говорит, что запрос "Абв" соответствует файлу Абв.htm. При нажатии кнопки пользователя перебрасывает на эту страницу сразу, без выдачи результатов поиска. Если он задаст в поиске "Эюя", то страница соответствия тоже укажет (благодаря моей ручной записи об этом), что это файл Абв.htm. А вот если пользователь вобьёт что-нибудь третье, то переход просто не сработает. В лучшем случае можно сделать выдачу надписи типа "Ваш запрос неверен, попробуйте найти данную статью вручную", в худшем - вообще ничего не надо. Не работает - и ладно.
0
Jewbacabra
Эксперт PHP
3865 / 3185 / 1388
Регистрация: 24.04.2014
Сообщений: 9,680
30.03.2015, 12:15 6

Не по теме:

Кликните здесь для просмотра всего текста
Цитата Сообщение от Сура Посмотреть сообщение
Я делаю сайт уже более 10 лет. Несколько лет назад перевёл всё в HTML5. Сайт пишу сам, ручками в блокноте, ничего другого не использую. Сайт на самом деле весьма крупный и посещаемый, но ничего более HTML я за эти годы не освоил, ну как-то не требовалось, ведь сайт чётко структурирован, типичный Web 1.0, никакого взаимодействия с пользователями не предусматривалось. Баз данных никаких нет, сайт - более 900 статических страниц формата .htm Для удобства использую, естественно, CSS и SSI, так что если что изменить надо - проблем тоже нет. Благодаря помощи вставил одну страничку PHP для вывода рандомной информации в одном из разделов.
Сначала создаем себе трудности, а потом героически их преодолеваем.


Сура, на html это в любом случае не сделаешь, html - это просто разметка данных.
Можно написать простой скрипт на js:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// псевдокод
$('#search-form').submit(function(e) {
    e.preventDefault(); // отмена действий по-умолчанию
    // аяксом запросить файл с json вида "запрос" : "страница"
    $.get('path/to/json/with/pages', function(data) {
        var res = JSON.parse(data);
        var page = res[$('#search-input').val()];
        if (page) {
            location.href = page;
        } else {
            // не найдено соответствий
        }
    });
});

Не по теме:

PS. Если не секрет, можешь оставить ссылку на сайт?

1
Сура
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 14
30.03.2015, 12:38  [ТС] 7
Ну, если бы я в 2001 г., когда начинал делать сайт знал о PHP, то может сразу бы и делал так... Но я же не программист и им никогда не был, поэтому уж делаю, как умею.

Ссылку на сайт можно, не секрет: http://www.rosmetrostroy.ru

Вот насчёт ява-скрипта мне понравилось, только я всё равно плохо понимаю, что куда вписывать. А можно пример, как именно должна выглядеть страница соответствия? С записями.

Ещё в качестве примера того, что же я хочу получить. Вот на http://www.htmlbook.ru - в левом верхнем углу:
поиск по тегу - вот оно! Только там ещё подсказки выскакивают в процессе впечатывания запроса. Ну на них я даже не рассчитываю, мне бы хотя бы просто систему "запрос" - "переход".
0
Июнь
Заблокирован
30.03.2015, 15:01 8
Цитата Сообщение от Сура Посмотреть сообщение
Что до ссылок - проблема в том (и видимо в моём консерватизме), что все эти функции предполагают самостоятельную работу движка, то есть это некий бот, который делает скан массива и что-то оттуда выуживает. А мне этого не надо. Мне надо всё контролировать самому То есть я сам ручками пишу страницу соответствия предполагаемого запроса в поиске и предполагаемого перехода.
Зачем создавать файл, а потом еще его заносить в таблицу, когда скрипт может обрабатывать актуальный состав файлов. Или запрашиваемый ключ не всегда в точности совпадает с именем файла?

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

Можно перенести на PHP/MySQL и 900 страниц, и 10000 страниц. Более того, если страницы однотипны, хорошо структурированы, то это не так уж и сложно сделать.

Добавлено через 12 минут
Скрипт несложный: получить с формы ключ (можно даже GET-запросом), проверить наличие соответствующего файла, если есть – перенаправить на него, иначе выдать сообщение вместе с той же формой.
0
Сура
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 14
30.03.2015, 15:20  [ТС] 9
Конечно. Имя файла может соответствовать устаревшему названию, например. Ну для понятности:
есть файл http://www.rosmetrostroy.ru/dybenko.htm
Он называется так, потому то проектное название станции Ховрино было Улица Дыбенко.
Соответственно, мне надо, чтобы человек мог выйти на статью через поиск без путешествия по разделам Строительство или Новости или как-то ещё напрямую, введя одно из трёх значение: Ховрино (действующее название), Улица Дыбенко (проектное) и, например, просто Дыбенко. Все три введённых значения должны вести на одну страницу dybenko.htm. Другие варианты запроса на неё вести не должны никак.

Я понимаю, что соответствие могу написать только я и только вручную. Только я знаю надо ли выбрасывать человека, который ввёл слово Дыбенко, на страницу про Ховрино или же нет. Поэтому я и хочу воплотить это именно так, как я выше привёл в примере про сайт http://www.htmlbook.ru

Было бы замечательно, если в процессе набора, пользователю выдавались бы подсказки. Хотя бы потому, что есть одинаковые названия для разных городов (Площадь Революции в Челябинске и в Красноярске, например), и человеку надо дать возможность выбрать из предложенных вариантов.

Но если и без подсказок - всё равно, было бы замечательно.
0
Июнь
Заблокирован
30.03.2015, 15:39 10
Если так, тогда нужно делать словарь, причем чтобы разные ключи могли вести на одну страницу, но не наоборот (т.к. целевая страница всегда должна быть максимум одна, ведь выводить результаты поиска не планируется). Конечно, "живой поиск" тут будет весьма полезен, иначе пользователь, введя "площадь революции", либо никуда не попадет, либо может попасть не туда, куда ему нужно (если вы свяжете этот ключ с одним городом, а ему нужен был другой).
0
Сура
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 14
30.03.2015, 16:10  [ТС] 11
Ну да. Вот такой словарь я и хочу сделать. Собственно, и жду совета, как именно его делать, каков должен быть формат записи. И как всё это выдавать в поиске.
0
Trukl
Заблокирован
30.03.2015, 16:21 12
Готовое решение.
0
Сура
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 14
30.03.2015, 16:35  [ТС] 13
Нет. Не то. Это опять же прикручивание бота, который что-то там будет искать и выдавать результат. Не искать, не выдавать результат не надо. Искать буду я И результат в виде перехода на нужную страницу должен быть такой, как задумано мной, а не ботом.

Добавлено через 8 минут
Цитата Сообщение от Jewbacabra Посмотреть сообщение
if (page) {
* * * * * * location.href = page;
Вот должна быть такая страница, где вручную мною будут вбиты пары: if 'Ховрино' location.href='dybenko.htm'
if 'Улица Дыбенко' location.href='dybenko.htm' и. т. д.

Но я, увы, не знаю синтаксиса всего этого.
0
Июнь
Заблокирован
30.03.2015, 17:22 14
Вот и появился повод познакомиться с SQL. Пишите так:
Код
INSERT INTO `dictionary` (`key`, `page`) VALUES
('улица дыбенко', 'dybenko'),
...,
...;
0
Trukl
Заблокирован
30.03.2015, 17:30 15
Цитата Сообщение от Июнь Посмотреть сообщение
Пишите так:
Куда писать. БД то у него нет. И ставить он её не хочет.
0
Июнь
Заблокирован
30.03.2015, 17:39 16
Пока нету В скрипте определять массив такого объема не стоит.
0
Trukl
Заблокирован
30.03.2015, 17:41 17
Нам совершенно ясно что автору нужен велосипеб. Но абы какой ему не нужен. Ему нужен только такой который можно изготовить используя из инструментов, исключительно , кувалду, метроном и маникюрные ножницы, а из материалов дерево, песок и воду. При чём желательно что бы педали надо было бы крутить руками, и никак не легче 80 килограмов массы. И всё только потому что он к такому привык.
0
Сура
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 14
30.03.2015, 17:54  [ТС] 18
Нет-нет. Я не хочу велосипед из песка. Я готов сделать такой велосипед, какой надо. Но если мне нужен трёхколёсный велосипед для ребёнка 6 лет, то я категорически не хочу ставить на него трековую резину.

Хостинг позволяет и БД поставить, и что угодно. Поэтому я могу вписать это так, как это делается "по науке". Просто не хочется делать это сложнее, чем можно было бы. Ну вот есть у меня файлик, который отвечает за выдачу рандомной информации в разделе "Знаете ли вы что". Он имеет вид простого текстового файла расширением .php
где в виде таких вот записей:
$quotes[] = '...станция «Горьковская» (сейчас — «Тверская&raquo — не единственная в СССР подземная станция, сооружённая на действующем участке без остановки движения поездов. Второй такой станцией стала «Октябрьская» (сейчас — «Зоравар Андраник&raquo в Ереване.'; даны все возможные варианты выдачи.

Вот такую схему я понимаю. Почему нельзя соорудить такой же листок с нужными парами ключ - выдача?

Впрочем, повторюсь, если нужно прикрутить базу - я не против. Только не знаю как и к чему её прикручивать
0
tgarl
357 / 351 / 81
Регистрация: 15.02.2012
Сообщений: 1,369
30.03.2015, 17:59 19
вы базой пользоваться не хотите, правильно?
PHP - можно?

если да, то можно сделать такой вариант:
создаете 2 файла с расширением php
1 - будет справочником
2 - работа со справочником

вам нужно будет так же пониманеи ajax к примеру
Javascript
1
2
3
4
5
6
7
8
9
10
var q = $("#индификатор инпута").val();
$.ajax({  
          type: "POST",  
          url: "2.php",  
          data: "q="+q,  
          success: function(html){  
            if (html=="error") {alert("нет такого");}
            else{document.location.href=html;}
          }  
    });
создаете поле инпут с уникальным идентификатором на всем сайте.
пишите скрипт js по клику отправлять введеное в это поле на страницу 2.php
на этой странице инклюдите справочник 1.php который составляете в виде нужного вам масива данных
PHP
1
2
3
4
5
6
7
<?php
$spravochnik=array(
    "фбм"=>"index.htm",
    "таганка"=>"/metro/tagan.htm",
    ....
);
?>
на странице 2.php
у вас будет весь массив и соответсвенно вы можете вернуть по ajax страницу
PHP
1
2
3
4
5
<?php
include("1.php");
if (!empty($spravochnik[$_REQUEST["q"]])) {echo "$spravochnik[$_REQUEST["q"]]"; }
else{echo "error";}
?>
ну и при возвращении редирект или сообщение об ошибке
0
Июнь
Заблокирован
30.03.2015, 18:13 20
Сура, все дело в скорости поиска. Для "живого поиска" это особенно актуально.

Добавлено через 9 минут
Если вам удобнее писать что-то вроде

страница1;ключ1;ключ2;...
страница2;ключ5;ключ6;...

это можно устроить. Я вам показала структуру в том виде, в котором она будет храниться в базе данных.
0
30.03.2015, 18:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2015, 18:13

Как можно вставить базу данных в html, и сделать поиск по этой базе?
Как можно вставить базу данных в html , и сделать поиск по этой базе ? Я хочу сделать свой сайт -...

Как сделать поиск по сайту?
Хочу сделать поисковик по сайту. Хранение информации всех страниц организовано в файлах (.txt)....

Как сделать поиск по сайту?
Всем привет. Мне нужно сделать поиск по сайту. Есть таблица с категориями товаров - cms_uc_cats,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru