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
  • Михаил
    Не работает, ни так, ни с изменением id
  • Евгений
    А не проще сделать как обычно? к '#jshop_search' прибавить id модуля, он то уникальный? вот и получим что-то типа такого: #jshop_search_12 ....
    • Blog About
      Проще и думаю даже правильнее, учитывая то, что не рекомендуется использование повторяющихся идентификаторов элементов в разметке.

Добавить комментарий