Клуб Яндекс.Поиска для сайта

Выдача результатов поиска из Собственной формы сайта. Возможна ли? Как?

Денис Тар
22 сентября 2016, 16:53

Здравствуйте!

Возможно ли (если "да", как это сделать) выводить Результаты_поиска без использования формы ввода сервиса? Дело в том, что на сайте имеется поисковая форма, работу которой в целом задумываю по двум алгоритмам (переключатель между ними - RadioButton-элементы).

1. Ищет по моему собственному алгоритму среди XML-файлов, выводя результаты для файлов, привязанных к данным файлам XML (компилированные PDF, берущие данные для поиска и ссылок из соответствующих XML-файлов).

2. Яндекс-Поиск. Результат - вывод документов (страниц), найденных Яндексом.

(При 2-м алгоритме, разумеется, еще одна форма ввода поиска для пользователя нелогична и излишня).

Имеем простую форму вида:

 

- в зависимости от значения RadioButton, она передает переменную "поисковый запрос" и запускается алгоритм того или другого обработчика вывода результатов:

- search_pdf.php

- search_yandex.php (используется только вторая часть кода от Яндекса - вывод на страницу).

Думаю, что Возможно. Каким образом правильно передать переменную в ниже приведенный код Яндекс-поиска?

<!-- Код формы поиска -->
<div class="ya-site-form ya-site-form_inited_no" onclick="return {'action':'http://мой-сайт.ru/search_ya.php','arrow':false,'bg':'transparent','fontsize':14,'fg':'#000000','language':'ru','logo':'rb','publicname':'Поиск на Моем-сайте.ru','suggest':true,'target':'_self','tld':'ru','type':3,'usebigdictionary':false,'searchid':2279368,'input_fg':'#000000','input_bg':'#ffffff','input_fontStyle':'normal','input_fontWeight':'normal','input_placeholder':'поиск по сайту','input_placeholderColor':'#4c4c4c','input_borderColor':'#7c7c7c'}"><form action="https://yandex.ru/search/site/" method="get" target="_self" accept-charset="utf-8"><input type="hidden" name="searchid" value="2279368"/><input type="hidden" name="l10n" value="ru"/><input type="hidden" name="reqenc" value=""/><input type="search" name="text" value=""/><input type="submit" value="Найти"/></form></div><style type="text/css">.ya-page_js_yes .ya-site-form_inited_no { display: none; }</style><script type="text/javascript">(function(w,d,c){var s=d.createElement('script'),h=d.getElementsByTagName('script')[0],e=d.documentElement;if((' '+e.className+' ').indexOf(' ya-page_js_yes ')===-1){e.className+=' ya-page_js_yes';}s.type='text/javascript';s.async=true;s.charset='utf-8';s.src=(d.location.protocol==='https:'?'https:':'http:')+'//site.yandex.net/v2.0/js/all.js';h.parentNode.insertBefore(s,h);(w[c]||(w[c]=[])).push(function(){Ya.Site.Form.init()})})(window,document,'yandex_site_callbacks');</script>

<!-- Код результатов поиска -->
<div id="ya-site-results" onclick="return {'tld': 'ru','language': 'ru','encoding': '','htmlcss': '1.x','updatehash': true}"></div><script type="text/javascript">(function(w,d,c){var s=d.createElement('script'),h=d.getElementsByTagName('script')[0];s.type='text/javascript';s.async=true;s.charset='utf-8';s.src=(d.location.protocol==='https:'?'https:':'http:')+'//site.yandex.net/v2.0/js/all.js';h.parentNode.insertBefore(s,h);(w[c]||(w[c]=[])).push(function(){Ya.Site.Results.init();})})(window,document,'yandex_site_callbacks');</script>

9 комментариев
Подписаться на комментарии к посту
Добрый день!
Вообще можно попробовать вот такую конструкцию использовать: https://yandex.ru/blog/sitesearch/449 
Что касается того, как сделать так, чтобы использоваться свою форму поиска -
технически это сделать можно, например, как тут: http://gov.spb.ru/search/?text=питер&site=gov.spb.ru&searchid=2166815&web=0
Но давать инструкцию о том, как это сделать, наша поддержка не может, так как:
1) это ухудшает см поиск (в нём отсутствуют подсказки);
2) мы не можем гарантировать качество работы такой формы, так как её создавали нет мы. 
firstlena.pershina,

в примере "http://gov.spb.ru/search/?text=питер&site=gov.spb.ru&searchid=2166815&web=0" 
я со своего понял, просмотрев ссылку 
http://ogni-sochi.ru/search_ya.php?searchid=2279368&text=пляжный%20отдых&web=0 , 

что ?text=... - сюда можно передать переменную из моей формы, 
а searchid=2279368 и web=0 - не понял за что отвечают, 
хотя в остальном, кажется, готовый поисковик, заработал (через адресную строку в др. браузере)
Денис Тар,
searchid - это идентификатор вашего поиска, нужно брать тот, что у вас в URL настроек, он отвечает за все :) 
firstlena.pershina,

...единственное, что почему-то не делается, так это не находится сразу, но при обновлении страницы (нажатием ENTER в адресной строке - аналогично, как событие OnClick при отправке Form возникает) - при перезагрузке становится все нормально.
Как этого избежать? Принудительно скрипт перезагрузки страницы прописать отдельно что ли?
Результат использования можно увидеть Здесь: http://ogni-sochi.ru/form_search.php (для запроса можно использовать " пляжный отдых ")

Денис Тар,
Не удается воспроизвести проблему: Захожу по этой ссылке -Выбираю в радио «по сайту» -  Ввожу «пляжный отдых» - энтер - Попадаю на страницу результатов - Результаты есть. 
Можно подробнее о проблеме, в каком браузере она воспроизводится. 
firstlena.pershina,
Спасибо!
Вроде, сегодня всё работает, хотя ничего не менялось; а вчера какую-то странную реакцию наблюдал. (Возможно, как-то с перезапуском браузера связано; главное - что Работает! :) )
Денис Тар,
Ок, если вдруг будут еще вопросы - пишите.
firstlena.pershina,
http://gov.spb.ru/search/?text=питер&site=gov.spb.ru&searchid=2166815&web=0
Тут (а точнее, тут http://gov.spb.ru/static/_g/js/yandex_search.js) у них встречается создание обработчика для события 'yass.ready'.
Это очень интересно. Где можно посмотреть на этот счет документацию?
Обновлено 12 апреля, 16:51
firstlena.pershina
13 апреля, 09:17
mif19750629,
Добрый день! Вот в этом вебинаре (в последней теме): https://www.youtube.com/watch?v=KTA7JmLJ57c