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

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 2.9

Внедрение Яндекс.Поиска на сайте

На стороне Яндекса

1. Заходим на сайт http://site.yandex.ru/
2. Нажимаем кнопку "Установить поиск"
3. Шаг 1. Область поиска
   а) Название поиска - придумываем для себя название поиска, т.к. таких поисков может быть несколько (обязательно);
   б) Нажимаем на ссылку "+Добавить сайты", в появившемся окне вводим названия сайтов, на которых будем внедрять поиск (обязательно);
   в) Если желаем добавить категории Яндекс.Каталога, то нажимаем кнопку "Добавить категории Яндекс.Каталога";
   г) Вы можете создать или добавить поисковые темы, нажав на кнопку "Добавить поисковые темы";
   д) Если Вы желаете получать сообщения об изменении статуса поиска, то в соответствующее поле введите свой адрес электронной почты.
4. Шаг 2. Форма поиска
   а) Настройте цвет фона и размер шрифта;
   б) Определите область поиска по-умолчанию (на сайте, в Интернете, отключить);
   в) выберите тип формы (прямоугольная, в виде стрелки);
   г) посмотрите на итоговый вид формы.
5. Шаг 3. Результаты поиска
   3.1 В секции "Где показывать результаты" выберите пункт "в iframe на странице" и введите адрес: http://mysite.ru/search/search_do/
      а) в результатах поиска может появляться реклама, Вы можете настроить её появление в стороне от результатов поиска или в одну колонку. В последнем случае, поставьте флажок на опции "показывать рекламу и результаты поиска в одну колонку";
      б) Если желаете "Открывать страницу результатов в новой вкладке", то поставьте флажок на соответствующей опции.
   3.2 В секции "Основные свойства страницы", Вам необходимо настроить цвет фона страницы результатов поиска и выбрать шрифт.
   3.3 В секции "Результаты поиска", Вы можете:
      а) настроить цвет, размер и свойства шрифта (полужирный, курсив) для названия найденной страницы в результатах поиска;
      б) настроить цвет, размер и свойства шрифта (полужирный, курсив) для описания найденной страницы в результатах поиска;
      в) включить или отключить отображение адреса домена, а также настроить цвет и свойства шрифта;
      г) включить или отключить отображение ссылки на сохраненную копию, а также настроить цвет и свойства шрифта.
   3.4 В секции "Ссылки и навигация", вы можете настроить цвета посещенных ссылок и ссылок при наведении на них курсора, а также цвета навигации.
6. Шаг 4. Проверка поиска. Если Ваш сайт ещё не был проиндексирован Яндексом, то скорее всего при каком-либо запросе Вы получите ответ, что ничего не найдено.
7. Шаг 5. Код для вставки на сайт. Вы получите два кода:
   а) код для поисковой формы
   б) код, для размещения на странице результатов поиска.

На стороне сайта

Внедрение на TPL-шаблонах (на примере стандартного)

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

8. Открываем файл /classes/modules/search/__custom.php и после комментария //TODO: Write your macroses here пишем две функции, первая будет выводить форму, а вторая результат поиска:

 //TODO: Write your macroses here

function yandex_search_form () {
$form=<<<YANDEXFORM
<div class="ya-site-form ya-site-form_inited_no" onclick="return {'bg': '#ffccff', 'target': '_self', 'language': 'ru', 'suggest':
 true, 'tld': 'ru', 'site_suggest': true, 'action': 'http://mysite.ru/search/search_do/', 'webopt': false, 'fontsize': 12, 'arrow':
 false, 'fg': '#000000', 'searchid': '1927492', 'logo': 'rb', 'websearch': false, 'type': 3}">
<form action="http://yandex.ru/sitesearch" method="get" target="_self">
<input type="hidden" name="searchid" value="1927492" />
<input type="hidden" name="l10n" value="ru" /><input type="hidden" name="reqenc" value="" />
<input type="text" 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;
(' '+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>
YANDEXFORM;
		return $form;
		}
		
function yandex_search_result () {
$result=<<<YANDEXRESULT
<div id="ya-site-results" onclick="return {'tld': 'ru', 'language': 'ru', 'encoding': ''}"></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>
YANDEXRESULT;
		return $result;
		}
	};

Обратите внимание, что файл _custom.php должен быть сохранен в кодировке UTF-8 (без BOM), а также что после меток <<<METKA недолжно быть лишних символов, включая пробела.

9. Создадим файл permissions.custom.php и пропишем права на наши макросы:

<?php
	$permissions = Array(
		'search' => Array('yandex_search_form','yandex_search_result')
	);
?>

10. Сделаем вызов макроса %search yandex_search_form()% в шаблоне /tpls/search/home.tpl, а также в шаблоне /tpls/search/default.tpl для секции $FORMS['search_form']

11. Сделаем вызов макроса %search yandex_search_result()% в шаблоне /tpls/search/default.tpl внутри секций $FORMS['search_empty_result'], $FORMS['search_form'].

Внедрение на XSLT-шаблонах (на примере стандартного)

В этот раз вставим код без использования макросов.
Для начала нам необходимо доработать код под XSLT.
Заключим тег <div> в элемент <xsl:text></xsl:text>, а скрипт в конструкцию <![CDATA[ ]]>:

<xsl:text disable-output-escaping="yes">
&lt;div class="ya-site-form ya-site-form_inited_no" onclick="return{'bg': '#ffccff', 'target': '_self', 'language':
 'ru', 'suggest': true, 'tld': 'ru', 'site_suggest': true, 'action': 'http://mysite.ru/search/search_do/', 'webopt':
 false, 'fontsize': 12, 'arrow': false, 'fg': '#000000', 'searchid': '1927492', 'logo': 'rb', 'websearch': false, 'type': 3}"&gt;
</xsl:text>
<form action="http://yandex.ru/sitesearch" method="get" target="_self">
<input type="hidden" name="searchid" value="1927492" />
<input type="hidden" name="l10n" value="ru" />
<input type="hidden" name="reqenc" value="" />
<input type="text" name="text" value="" />
<input type="submit" value="Найти" />
</form>
<xsl:text disable-output-escaping="yes">
&lt;/div&gt;
</xsl:text>
<style type="text/css">.ya-page_js_yes .ya-site-form_inited_no { display: none; }</style>
<script type="text/javascript">
<![CDATA[(function(w,d,c){var s=d.createElement('script'),h=d.getElementsByTagName('script')[0],e=d.documentElement;
(' '+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>

Исправленный код для вывода результатов поиска:

<xsl:text disable-output-escaping="yes"> &lt;div id="ya-site-results" onclick="return {'tld': 'ru', 'language': 'ru', 'encoding': ''}"&gt;
&lt;/div&gt;&lt;script type="text/javascript"&gt;(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');&lt;/script&gt; 
</xsl:text>

Поместим код поисковой формы в файле /xsltTpls/modules/search/search-form.xsl внутри <xsl:template name="search-form-left-column">, а также в файле /xsltTpls/modules/search/search-results.xsl внутри шаблона <xsl:template match="udata[@method = 'search_do']">, там же разместим код для вывода результатов поиска.

Если же Вы будете использовать макросы, то дорабатывать код не нужно, достаточно вызвать его в нужном месте шаблона следующим образом:

Вызов формы

<xsl:value-of select="document('udata://search/yandex_search_form')/udata" disable-output-escaping="yes"/>

Вызов результатов поиска

<xsl:value-of select="document('udata://search/yandex_search_result')/udata" disable-output-escaping="yes"/>