Не работает поиск OpenCart при переносе
В базовый шаблон OpenCart уже встроено немало скриптов, облегчающих жизнь разработчику. Однако, иногда приходится сталкиваться с не самыми очевидными проблемами. Одна из них: перестает работать поиск при переносе его в другое место.
В чем это проявляется?
Вот, предположим, вы решили переместить поиск в другое место. Перенести его просто: находим в файле шаблона шапки (\template\common\header.tpl) что-то типа этого:
<div class="col-sm-5"> <?php echo $search; ?> </div>И переносим в том, место, куда требуется. Однако, радость наша будет недолгой: поиск перестает искать. То есть. Поле нажатия показывает, что ничего не найдено.
Почему?
Дело в том, что обработчик кнопки поиск (функция JavaScript) получает значение для поиска не просто по имени поля ввода, но еще имя должно быть в одном элементе. То есть привязано к её расположению относительно других элементов (то есть дерева DOM). Так что, если мы откроем файл «catalog\view\javascript\common.js», то увидим вот это:
/* Search */ $('#search input[name=\'search\']').parent().find('button').on('click', function() { var url = $('base').attr('href') + 'index.php?route=product/search'; var value = $('header #search input[name=\'search\']').val(); if (value) { url += '&search=' + encodeURIComponent(value); } location = url; });И это:
$('#search input[name=\'search\']').on('keydown', function(e) { if (e.keyCode == 13) { $('header #search input[name=\'search\']').parent().find('button').trigger('click'); } });Первая строка функция запускает поиска по клику по кнопке, а вторая – при нажатии энтера (точнее, когда его отпускают) имитирует клик по кнопке, то есть делает то же, что и первая.
Как решить проблему?
Просто убрать из этих функций слово header из этих строк:
$('header #search input[name=\'search\']')Получится:
$('#search input[name=\'search\']')Работает для OpenCart 2.3 и ocStore 2.3.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.