Как добавить поиск на сайт на платформе Winter CMS

В данном случае мы будем использовать плагин 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()
    {
    }
}

После добавления данного кода, поиск на вашем сайте будет работать и для вашего плагина. Обратите внимание, что ваш плагин не будет отображаться в списке настраиваемых плагинов.