В данном случае мы будем использовать плагин Offline Sitesearch, который содержит все необходимое для добавления поиска на сайт в Winter CMS и помогает экономить время. В настройках плагина вы найдете список плагинов, для которых есть поиск по умолчанию, а также возможность подключения поиска для своего сайта. Для этого необходимо вставить следующий код в файл Plugin в корневой папке плагина:
<?php namespace RaccoonLord\TestPlugin;
use System\Classes\PluginBase;
use Event;
use \Winter\Sitemap\Models\Definition;
class Plugin extends PluginBase
{
public function boot()
{
// Поиск по сайту
\Event::listen('offline.sitesearch.query', function ($query) {
// Данный контроллер генерирует URL.
$controller = \Cms\Classes\Controller::getController() ?? new \Cms\Classes\Controller();
// Поиск контента в вашем плагине
$items = Models\Items
::where('name', 'like', "%${query}%")
->orWhere('description', 'like', "%${query}%")
->get();
// Теперь создайте массив результатов
$results = $items->map(function ($item) use ($query, $controller) {
// Если запрос найден в заголовке, установите релевантность 2
$relevance = mb_stripos($item->title, $query) !== false ? 2 : 1;
// (Необязательно) Добавьте возрастное наказание к более старым результатам. Это гарантирует, что
// сначала будут перечислены более новые результаты.
// if ($relevance > 1 && $item->created_at) {
// $ageInDays = $item->created_at->diffInDays(\Illuminate\Support\Carbon::now());
// $relevance -= \OFFLINE\SiteSearch\Classes\Providers\ResultsProvider::agePenaltyForDays($ageInDays);
// }
return [
// Название
'title' => $item->name,
// Основной текст
'text' => $item->description,
// Генерируем URL
// В случае если есть параметр из Relation - описываем его так:
// 'category' => $item->category['0']['slug']]
'url' => $controller->pageUrl('shop-single', ['slug' => $item->slug),
// Вставляем миниатюры из System\Models\File
'thumb' => optional($item->img)->first(),
// Рлевантность (о ней писал выше)
'relevance' => $relevance,
// Любая дополнительная информация по которой
// Вы хотите дополнительно проводить поиск
// 'meta' => 'data',
//Комментарий от автора
// optional, pass along the original model
// 'model' => $item,
];
});
return [
//Комментарий от автора
// The badge to display for this result
'provider' => 'Document',
'results' => $results,
];
});
}
public function registerComponents()
{
}
public function registerSettings()
{
}
}
После добавления данного кода, поиск на вашем сайте будет работать и для вашего плагина. Обратите внимание, что ваш плагин не будет отображаться в списке настраиваемых плагинов.