Для Shopaholic есть плагин поиска Search for Shopaholic, но он платный. Сделать элементарную функцию поиска по названию товара можно и самому.
Для начала в консоли перейдем в папку с проектом и создадим плагин
php artisan create:plugin Site21.Search
Далее по официальной документации Shopaholic расширяем ProductCollection. В этом разделе мы продублируем все необходимые шаги, которые вам нужно выполнить, чтобы добавить свой пользовательский фильтр по любому полю товара в класс ProductCollection.
Файл: plugins/site21/search/classes/event/product/ExtendProductCollection.php
Здесь мы создаём класс события для расширения класса ProductCollection. То есть если
<?php namespace Site21\Search\Classes\Event\Product;
use Lovata\Shopaholic\Models\Product;
use Lovata\Shopaholic\Classes\Collection\ProductCollection;
class ExtendProductCollection
{
public function subscribe()
{
ProductCollection::extend(function ($obProductList) {
$this->poisk($obProductList);
});
}
protected function poisk($obProductList)
{
$obProductList->addDynamicMethod('poisk', function ($value) use ($obProductList) {
$arResultIDList = (array) Product::where('name', 'like', '%'.$value.'%')->lists('id');
return $obProductList->intersect($arResultIDList);
});
}
}
Файл: plugins/site21/search/Plugin.php
Добавим прослушиватель событий в файл Plugin.php.
<?php namespace Site21\Search;
use Event;
//...
use Site21\Search\Classes\Event\Product\ExtendProductCollection;
//...
public function boot()
{
//...
Event::subscribe(ExtendProductCollection::class);
}
Создадим страницу /search "Поиск товаров" и в коде пишем:
use Input;
function onInit() {
$this['q'] = Input::get('q');
}
Теперь мы можем использовать такой механизм:
use Lovata\Shopaholic\Classes\Collection\ProductCollection;
$obProductList = ProductCollection::make()->poisk($q);
где выйдут товары с совпадением по LIKE %товар%.
Если использовать тему Bootstrap theme for Shopaholic то можем отредактировать в шаблоне partial product/catalog-product-list/catalog-product-list и после
{% set obProductList = ProductList.make().category(obActiveCategory.id) %}
добавить:
{% if q %}
{% set obProductList = ProductList.make().poisk(q) %}
{% endif %}
В разметку страницы выводим (не забываем добавить компонент "Список товаров"):
{% partial 'product/catalog-product-list/catalog-product-list' q=q %}
Использование этого чанка позволит нам использовать имеющуюся верстку темы bootstrap.
Шаг чисто символический, для новичков. На данный момент если перейти по адресу сайт.ру/search?q=запрос выведутся товары с использованием поиска. Создадим partial для примера:
<form class="form-inline" action="/search">
<div class="form-group input-group mx-sm-3 mb-2">
<input type="text" name="q" class="form-control form-control-sm" id="q" placeholder="Поиск товара">
<button type="submit" class="btn btn-primary btn-sm input-group-append">Искать</button>
</div>
</form>
Главное чтобы action формы вел на новую страницу с результатами.
В итоге получился простой поиск товаров простейший поиск товаров в Shopaholic. Можно искать и по другим полям если мы на 2 шаге заменим поле name (название товара).
Опубликовано 2 марта 2021 г. в категориях: October CMS Shopaholic
Если Вам необходимо внедрить данную разработку на свой проект, свяжитесь со мной, обсудим цену и срок.