madmatt/silverstripe-funnelback

提供搜索 Funnelback 集合的接口

安装次数: 1,099

依赖项: 0

建议者: 0

安全性: 0

星级: 1

关注者: 2

分支: 2

开放性问题: 1

类型:silverstripe-vendormodule

1.1.0 2023-02-20 04:01 UTC

This package is auto-updated.

Last update: 2024-09-06 14:57:47 UTC


README

本模块提供了一个查询 Funnelback 集合 的接口。

特性

当前特性

  • 通过一个或多个关键词搜索单个 Funnelback 集合
  • 向用户展示分页搜索结果
  • 已知与 Funnelback 版本 15 兼容,并经过测试。

您可以在 Whaikaha - Ministry of Disabled People 网站 上看到此模块的实际应用。

待完成事项

  • 在数据库中识别搜索结果,并提供最新内容供结果页面使用
  • 能够过滤或分解信息(取决于 Funnelback 是否支持此功能)

本模块不会尝试执行的操作

安装

通过 Composer 安装此模块

$ composer require madmatt/silverstripe-funnelback

要求

您需要使用 Silverstripe CMS 4.10 或更高版本,其他依赖项不应产生影响。

使用

安装模块后,您需要进行以下两项操作

  1. 配置必要的环境变量。
  2. 创建并集成您的搜索表单。

第 1 步:配置必要的环境变量

此模块需要配置以下环境变量

  • SS_FUNNELBACK_URL: 指向 Funnelback API 端点的基 URL,不包含任何尾随斜杠或路径。例如,https://example-uat-search.squiz.cloud
  • SS_FUNNELBACK_USERNAME: 由 Funnelback 提供的用户名。
  • SS_FUNNELBACK_PASSWORD: 由 Funnelback 提供的密码。
  • SS_FUNNELBACK_COLLECTION: 集合名称(例如 example-collection)。

配置完成后,模块可以用于执行搜索请求。

第 2 步:创建并集成您的搜索表单

您可能已经设置了某些搜索基础设施。如果是这样,根据需要进行调整。这里假设您还没有设置任何内容。

为您的搜索页面创建一个新的控制器 - app/src/Controllers/SearchController.php

<?php
namespace App\Controllers;

use Madmatt\Funnelback\SearchService;

class SearchController extends \PageController
{
    private static $dependencies = [
        'searchService' => '%$' . SearchService::class
    ];

    public SearchService $searchService;

    public function index(HTTPRequest $request)
    {
        $keyword = $request->getVar('q');
        $start = $request->getVar('start') ?? 0;

        // If a keyword has been supplied, perform a search and return the results.
        // Otherwise, don't bother performing an empty search.
        if ($keyword) {
            return [
                'Query' => DBField::create_field('Varchar', $keyword)
                'Results' => $this->searchService->search($keyword, $start),
            ];
        } else {
            return [];
        }
    }
}

接下来,通过一个 Director 路由注册您的新控制器,例如在 app/_config/routes.yml

---
Name: app-routes
After:
  - '#rootroutes'
  - '#coreroutes'
---
SilverStripe\Control\Director:
  rules:
    'search': 'App\Controllers\SearchController'

创建您的搜索结果模板(例如 themes/<theme>/templates/App/Search/Layout/Search.ss

<main>
    $SearchForm

    <% if $Results || $Query %>
    <section>
        <h2>Results for "$Query"</h2>
    </section>

    <section>
        <% if $Results %>
            <h3>Displaying $Results.FirstItem - $Results.LastItem results of $Results.TotalItems</h3>

            <ul>
                <% loop $Results %>
                <li>
                    <h3><a href="$Link">$Title</a></h3>
                    <p>$Summary.RAW</p>
                </li>
                <% end_loop %>
            </ul>

            <% if $Results.MoreThanOnePage %>
            <nav aria-label="pagination">
                <ul>
                    <% if $Results.NotFirstPage %>
                        <li><a href="$Results.PrevLink">Previous</a></li>
                    <% end_if %>

                    <% loop $Results.PaginationSummary %>
                        <% if $CurrentBool %>
                        <li>$PageNum <span class="sr-only">(current)</span></li>
                        <% else %>
                            <% if $Link %>
                                <li><a href="$Link">$PageNum</a></li>
                            <% else %>
                                <li>...</li>
                            <% end_if %>
                        <% end_if %>
                    <% end_loop %>

                    <% if $Results.NotLastPage %>
                        <li><a href="$Results.NextLink">Next</a></li>
                    <% end_if %>
                </ul>
            </nav>
            <% end_if %>
        <% else %>
            <h3>No search results found for "$Query"</h3>
        <% end_if %>
    </section>
    <% end_if %>
</main>

现在,假设 Funnelback 已经抓取了您的网站,您应该能够访问 http://your-website/search?q=testing 并让网站查询 Funnelback 并返回结果。

在您的 PageController 类中,添加以下 SearchForm 方法,以便您可以在网站的每个页面上输出搜索表单

<?php

use SilverStripe\CMS\Controllers\ContentController;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\FormAction;
use SilverStripe\Forms\TextField;

class PageController extends ContentController
{
    public function SearchForm(): Form
    {
        $form = Form::create(
            $this,
            __FUNCTION__,
            FieldList::create([
                TextField::create('q', 'Search query')
            ]),
            FieldList::create([
                FormAction::create('search')
            ])
        );

        $form
            ->setFormAction('/search') // Override the standard form action URL to always be /search
            ->setFormMethod('GET', true) // Ensure the form sends the search query in the URL so it can be bookmarked and cached etc
            ->disableSecurityToken(); // Turn off CSRF protection for this form, it's not required unless you have sensitive or private search results

        return $form;
    }
}

最后,将其添加到您的模板中

<header>
    $SearchForm
</header>

如果一切配置正确,您现在应该拥有所有需要的来在您的网站上启用 Funnelback 搜索。

可选配置

以下列出可选配置选项。

行为准则

在讨论此模块时,请遵守Silverstripe 社区行为准则