Joomshopping Search — несколько модулей поиска
На любом большом интернет-магазине должен присутствовать поиск по товарам. В противном случае, посетитель может просто не найти интересующий его товар. Так и с JoomShopping, разработчики предумотрели это и создали модуль поиска по товарам — JoomShopping Search.
Всё бы ничего, но, Вы когда-нибудь пробовали поставить на одной странице 2 модуля поиска? Странный вопрос, однако, может оказаться так, что по дизайну задумано поле поиска не только в шапке сайта, но и в конце странице, или дополнительное поле поиска размещается в отдельном сайдбаре для мобильного меню, причин может быть масса.
Как оказалось, разработчики этого не предусмотрели и, в результате размещения более одного модуля поиска товаров JoomShopping, работать будет последний из них.
С чем это связано? Всё просто — банальная ошибка логики скрипта валидации поля ввода.
Как это работает?
Откройте файл модуля JoomShopping Search /modules/mod_jshopping_search/tmpl/default.php
Обратите внимание на обработчик события отправки формы:
<form class="form-inline mod-shop-search form-inline" name="searchForm" method = "post" action="<?php print SEFLink("index.php?option=com_jshopping&controller=search&task=result", 1);?>" onsubmit="return isEmptyValue(jQuery('#jshop_search').val())">
Здесь можно заметить, что он берет поле ввода, проверяет данные и если всё корректно отправляет данные на сервер.
Но, проблема в том, что этот код проверяет данные одного поля с заданным селектором по идентификатору #jshop_search, и это может быть совсем не то поле, в которое Вы вводите данные. Т.е. если разместить более одной формы, то таких идентификаторов на странице будет более одного.
Давайте исправим код на следующий:
<form class="form-inline mod-shop-search form-inline" name="searchForm" method = "post" action="<?php print SEFLink("index.php?option=com_jshopping&controller=search&task=result", 1);?>" onsubmit="return isEmptyValue(jQuery(this).children('input[name=\'search\']').val())">
Здесь изменили обработку так, чтобы данные брались из текущей формы jQuery(this) дочернего поля с именем name=»search».
Вообще, в идеале подобные скрипты нужно выносить в отдельный файл, чтобы не происходило несколько выводов одного и того же скрипта. Но это уже другой вопрос.
Теперь, если Вы попробуете искать товары через любое из полей поиска, поиск будет срабатывать корректно. Ничего сложного.
JoomShopping 4.18.7