#1
Отправлено 09 November 2015 - 12:02 AM
Сразу в пекло так сказать. Смотрите, вот у нас есть поиск на сайте ShopCMS, как сделать так, чтобы он осуществлял поиск например вот такой - Вводим запрос: Драконы, а нам система показывает и дракон, и драконы, и о драконах. Возможно ли это сделать? А то сейчас получается такая ситуация: Вводим: Дракон - дракон, драконы и о драконах показываются. А если вводим "драконы", то в выдаче остаются тока "драконы", а нужно чтобы все три заголовка показывались. Как это сделать? И существует ли вообще решение этой проблемы. Спасибо.
#2
Отправлено 09 November 2015 - 12:42 AM
#3
Отправлено 09 November 2015 - 12:51 AM
Ввел запрос - Лампа - показались и лампы, и трубы. Ввел запрос "Труба", показались только трубы. Просто мистика какая-та. Вот сайт для интереса - cabelef.ru
#4
Отправлено 09 November 2015 - 01:03 AM
Как это работает можно посмотреть на https://cpu.badisoft.ru/ набрав в Яндекс-поиске (он вверху справа), например, "дрели". Будут найдены и "дрели", и "дрель".
Как установить поиск я на форуме, вроде, описывал. Вот еще раз:
=============================
1. Заходим на http://site.yandex.ru/searches/new/ и создаем себе поиск.
Из созданного поиска для установки нужен, по сути, только идентификатор (номер) созданного поиска.
Примерно такой - #1234567.
Хотя можно и поиграться с разными вариантами вида поискового блока.
2. Создаем в "Менеджере страниц" страницу (пускай она будет page_2.html) с названием и title Yandex-Search.
Именно такое название и titlе совершенно не обязательны, но если у вас ЧПУ автотранслирует имя страницы в ЧПУ-ссылку,
то довольно логично получить результатом поиска страницу yandex-search.html с аналогичным title .
Текст страницы надо вставлять в режиме "Источник":
<div onclick="return {'tld': 'ru', 'language': 'ru', 'encoding': 'windows-1251', 'htmlcss': '1.x', 'updatehash': true}" id="ya-site-results"> </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='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>
Что вписать в метатеги description и keywords - ей богу не знаю.
3. в файл index.tpl.html вставляем код Яндекс-поиска.
Сам код это то, что расположено между {literal} и {/literal}.
Остальная обвязка может быть другой в зависимости от шаблона и желаемого места расположения.
http://yousite.ru/yandex-search.html надо будет заменить на свой сайт (а если нет ЧПУ, то и на page_2.html),
а 124567 на код из п.1.
Для дефолтового шаблона это будет выглядеть так:
после строки
<td><a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}wide_search.html{else}index.php?search_with_change_category_ability=yes{/if}"><b>{$smarty.const.ADVANCED_SEARCH_LINK}</b></a></td>
вставляем
<td> </td>
<td width="30%">
{literal}
<div class="ya-site-form ya-site-form_inited_no" onclick="return {'bg': 'transparent', 'target': '_self', 'language': 'ru', 'suggest': true, 'tld': 'ru', 'site_suggest': true, 'action': 'http://yousite.ru/yandex-search.html', 'webopt': false, 'fontsize': 12, 'arrow': false, 'fg': '#000000', 'searchid': '1234567', 'logo': 'rb', 'websearch': false, 'type': 2}"><form action="http://yandex.ru/sitesearch" method="get" target="_self"><input type="hidden" name="searchid" value="1234567" /><input type="hidden" name="l10n" value="ru" /><input type="hidden" name="reqenc" value="windows-1251" /><input type="text" name="text" value="" /><input type="submit" value="Yandex-search" /></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>
{/literal}
</td>
Думаю, SQL таблицы работают в latin, а не в cp1251. Соответственно, поиск (LIKE в SQL-запросе) работает некорректно.Ввел знак "ъ" - и мне показались все товары, хотя этого символа не было ни в одном названии товаров.
#5
Отправлено 09 November 2015 - 01:05 AM
#6
Отправлено 09 November 2015 - 12:54 PM
Да, и еще... я уверен, что мне не под силу будет сделать это. Поэтому хочу узнать кто сможет помочь за денежку мне помочь. Спасибо.
#7
Отправлено 09 November 2015 - 02:45 PM
Именно так.Или надо все сносить и делать сайт на CP1251 базу?
1. Сделать бэкап базы
2. проверить, сохранилась ли в бэкапе русскоязычная информация хоть в какой-то кодировке, а то могут быть одни вопросики вместо русского в зависимости от разных факторов.
3. перекодировать бэкап в win1251 (это обычный текстовый файл, просто большой на рабочей базе).
4. заменить DEFAULT CHARSET в SQL-запросах в бэкапе на CP1251
5. создать новую базу в правильной кодировке (CP1251)
6. восстановить свою базу из бэкапа
Возможно, существует менее заморочный способ смены кодировки и collation table (она и нужна для корректного поиска, но без смены кодировки ее на нужную не сменить), но я его не знаю.
#8
Отправлено 09 November 2015 - 02:46 PM
#9
Отправлено 24 November 2015 - 08:44 PM
Скачивайте тут - https://www.dropbox....ecoder.zip?dl=0
#10
Отправлено 24 November 2015 - 10:33 PM
А что делает эта программа? Бесплатных конвертеров текстового файла из одной кодировки в другую - вагон и тележка.Заказывал на фрилансе программу, которая может спокойно переводить файл из CP1252 в CP1251
#11
Отправлено 24 November 2015 - 10:35 PM