madmatt / silverstripe-funnelback
提供搜索 Funnelback 集合的接口
1.1.0
2023-02-20 04:01 UTC
Requires
- php: ^8
- guzzlehttp/guzzle: ^7.4
- silverstripe/config: ^1
- silverstripe/framework: ^4.10
Requires (Dev)
- phpunit/phpunit: ^9
README
本模块提供了一个查询 Funnelback 集合 的接口。
特性
当前特性
- 通过一个或多个关键词搜索单个 Funnelback 集合
- 向用户展示分页搜索结果
- 已知与 Funnelback 版本 15 兼容,并经过测试。
您可以在 Whaikaha - Ministry of Disabled People 网站 上看到此模块的实际应用。
待完成事项
- 在数据库中识别搜索结果,并提供最新内容供结果页面使用
- 能够过滤或分解信息(取决于 Funnelback 是否支持此功能)
本模块不会尝试执行的操作
- 将内容索引到 Funnelback 集合中。相反,使用 silverstripe-search-service 模块 并添加您自己的 Funnelback 搜索服务,或者让 Funnelback 直接抓取您的网站。
安装
通过 Composer 安装此模块
$ composer require madmatt/silverstripe-funnelback
要求
您需要使用 Silverstripe CMS 4.10 或更高版本,其他依赖项不应产生影响。
使用
安装模块后,您需要进行以下两项操作
- 配置必要的环境变量。
- 创建并集成您的搜索表单。
第 1 步:配置必要的环境变量
此模块需要配置以下环境变量
SS_FUNNELBACK_URL
: 指向 Funnelback API 端点的基 URL,不包含任何尾随斜杠或路径。例如,https://example-uat-search.squiz.cloudSS_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 社区行为准则。