silverstripe/silverstripe-discoverer-search-ui

Discoverer搜索模块的搜索UI和主题

0.2.1-alpha 2024-09-10 23:11 UTC

This package is auto-updated.

Last update: 2024-09-10 23:12:09 UTC


README

提供Silverstripe页面类型、搜索UI和基本主题,以帮助您开始搜索实现。

安装

composer require silverstripe/silverstripe-discoverer-search-ui

使用此模块

提供的模板对您可能为搜索定义的字段进行了一些猜测,但您可能仍需要进行一些手动干预,以便帮助此搜索UI满足您的使用案例。

搜索结果页面

此模块自带一个SearchResults页面,该页面将在CMS中为您提供。只需在您的网站上创建此类页面之一,然后SearchResultsController将负责创建搜索表单并显示结果。

默认字段

此搜索UI假定您的索引中具有以下字段

  • 标题
  • 链接
  • content(可选)
  • body(可选)

自定义

开箱即用的SearchResultsController包含3个扩展点,允许您修改搜索表单,并允许您修改发送到您的搜索服务的查询。

创建一个新的扩展(例如)

<?php

namespace App\Extensions;

use SilverStripe\DiscovererSearchUI\Extension\SearchResultsExtension;

class SearchExtension extends SearchResultsExtension
{
}

通过扩展SearchResultsExtension,您将获得3个可用扩展点的脚手架。

应用扩展(例如)

SilverStripe\DiscovererSearchUI\Controller\SearchResultsController:
  extensions:
    - App\Extensions\SearchExtension

更新搜索查询

如果您需要添加对您添加的任何过滤字段的支持,如果您想指定特定的结果字段,或者您想在将查询发送到您的搜索服务之前更改查询的任何其他方面,则可以通过实现updateSearchQuery()方法来完成。

class SearchExtension extends SearchResultsExtension
{

    public function updateSearchQuery(Query $query, HTTPRequest $request): void
    {
        // A filter called "topic" that we added to our search form
        $topic = $request->getVar('topic') ?: null;

        // Title field to be limited to 200 chars, and formatted (snippets)
        $query->addResultField('title', 200, true);
        // Content field to be limited to 400 chars, and formatted (snippets)
        $query->addResultField('content', 400, true);
        // Body field to be limited to 400 chars, and formatted (snippets)
        $query->addResultField('body', 400, true);
        // The link to the Page or File
        $query->addResultField('link');

        // Apply our topics filter (if any were provided)
        if ($topic) {
            $query->filter('topic_id', $topic, Criterion::EQUAL);
        }
    }

}

添加搜索表单字段和操作

默认情况下,您的搜索表单上有“搜索词”字段和“搜索”(提交)操作,但如果您需要添加(例如)其他过滤选项或任何其他表单字段,则可以通过实现updateSearchFieldLists()方法来完成。

class SearchExtension extends SearchResultsExtension
{

    public function updateSearchFieldLists(FieldList $fields, FieldList $actions, HTTPRequest $request): void
    {
        // If the form has previously been submitted, see if a topic was specified
        $topic = $request->getVar('topic') ?: null;
        // A filter called "topics" that we want to add to our search form
        $topics = DropdownField::create(
            'topic',
            'Topic',
            [
                1 => 'Transformers',
                2 => 'Star Wars',
                3 => 'Star Trek',
            ]
        )
            ->setEmptyString('select one')
            // Set the previously submitted value to this field
            ->setValue($topic);

        $fields->add($topics);
    }

}

更新搜索表单

如果(由于任何原因)您需要更改搜索表单本身,则可以通过实现updateSearchForm()方法来完成。

class SearchExtension extends SearchResultsExtension
{

    public function updateSearchForm(Form $form, HTTPRequest $request): void
    {
        // For example, disabling the CSRF token?
        $form->disableSecurityToken();
    }

}

搜索结果模板

如果您想更改搜索表单和结果显示的方式(在更高层面),则您将想要覆盖位于templates/SilverStripe/DiscovererSearchUI/Page/Layout/SearchResults.ss下的模板。

记录模板

此模块提供了一个简单的Record.ss模板,它假定某些基本字段是可用的

  • 标题
  • 链接
  • 内容
  • 正文

如果您不使用这些字段,想要添加额外的字段,或者想要更改字段的显示方式,那么您需要覆盖位于templates/SilverStripe/Discoverer/Service/Results/Record.ss下的模板。

贡献

nvm use
yarn install

可用命令

  • yarn dev:带有未压缩文件的开发构建
  • yarn watch:开发构建并监视持续更改
  • yarn build:产品构建

生产dist文件应与您的Pull Request一起贡献。