Для Joomshopping существует официальный поисковый плагин, позволяющий с помощью com_search компонента джумлы находить наши товары. Но есть в этом плагине недостатки:
- Ищет он только по товарам. Поиск по категориям отсутствует
- Хотелось бы в результатах поиска видеть изображение искомого товара
Первый пункт легко дорабатывается дополнительным запросом в базу. А вот со вторым пришлось немного изменить стандартные шаблоны вывода поиска.
После установки поискового плагина Joomshopping его можно найти по сл. пути: /plugins/search/joomshopping/joomshopping.php
Сначала я дополнил в нем стандартный запрос. Добавил в SELECT поле image_name и через LEFT JOIN добавил таблицу с изображениями товаров.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$query = "SELECT prod.product_id AS slug, pr_cat.category_id AS catslug, prod.`".$lang->get('name')."` as title, CONCAT(prod.`".$lang->get('short_description')."`,' ',prod.`".$lang->get('description')."`) as text, '2' AS browsernav, prod.product_date_added AS created, cat.`".$lang->get('name')."` AS section, " . //Выбираем поле image_name из таблицы изображений "pr_img.image_name AS image_name FROM `#__jshopping_products` AS prod LEFT JOIN `#__jshopping_products_to_categories` AS pr_cat ON pr_cat.product_id = prod.product_id" . // Добавляем таблицу с изображениями "LEFT JOIN `#__jshopping_products_images` AS pr_img ON pr_img.product_id = prod.product_id LEFT JOIN `#__jshopping_categories` AS cat ON pr_cat.category_id = cat.category_id WHERE ($where) AND prod.product_publish = '1' AND cat.category_publish='1' GROUP BY prod.product_id ORDER BY $order "; |
Далее я прошелся по результатам этого запроса и сразу исправил ссылку на товар и заместо названия файла картинки прописал полный путь к ней:
1 2 3 4 5 6 7 8 9 10 |
if ($rows){ foreach($rows as $key => $row) { $rows[$key]->href = SEFLink('index.php?option=com_jshopping&controller=product&task=view&category_id='.$row->catslug.'&product_id='.$row->slug, 1); if (!empty($rows[$key]->image_name)) { $rows[$key]->thumb = JUri::root() . "/components/com_jshopping/files/img_products/" . $rows[$key]->image_name; } else { $rows[$key]->thumb = false; } } } |
Остается только добавить вывод картинки в шаблоне поиска. Шаблон поиска конечно лучше переопределить в папке своего шаблона. Для этого нужно создать в шаблоне папку html, создать в ней папку com_search, а в ней еще одну папку search. В конечную папку скопировать файлы из папки /components/com_search/views/search/tmpl/default.php.
В итоге структура файлов должна быть примерно такой:
Результаты поиска формируются в файле default_results.php, выводим изображение:
1 2 3 4 5 |
<?php if ($result->thumb) : ?> <div class="result-thumb"> <img class="img-responsive" src="<?php echo $result->thumb; ?>" alt="<?php echo $this->escape($result->title);?>"> </div> <?php endif; ?> |
Немного исправив шаблоны com_search можно добиться отличного оформления вывода поиска, что особенно актуально для интернет-магазинов:
Кому интересно, выкладываю архив со всеми изменениями. Учтите, что решение может не заработать на вашей конфигурации, возможно придется кое-что поменять. В частности, на другом сайте с Joomshopping мне пришлось поменять названия полей в запросе, т.к. таблицы отличались. Возможно это были разные версии Joomshopping’а.