liip / search-bundle
此包为在 Symfony2 应用中创建搜索 UI 提供了一些基本基础设施,并集成了 Google 搜索 API。
Requires
- php: ^5.3.9|^7.0
- symfony/framework-bundle: ~2.3|~3.0
- white-october/pagerfanta-bundle: ~1.0
Conflicts
- twig/twig: <1.12
This package is not auto-updated.
Last update: 2022-02-01 12:20:40 UTC
README
此包提供了一致接口,用于与各种搜索引擎进行全文搜索,并包含一个带有 twig 模板的控制器,用于渲染搜索表单和结果。
注意:您正在查看此包的第 2 版,与第 1 版相比有重大变化。
简介
此搜索包简化了将搜索功能添加到您网站的过程。
为您的提供包括
- 用于渲染带有 twig 模板的搜索框和搜索页面的控制器
- 用于查询 Google 站点搜索的服务
- 提供搜索结果分页的服务
内置搜索引擎支持
目前,默认支持 Google 站点搜索。有一个实现使用 Google REST API,另一个实现使用 自定义搜索元素功能,仅在前端使用 JavaScript 加载搜索。
欢迎为其他服务做出贡献。
安装
使用 composer require liip/search-bundle
安装此包。
在 app/Kernel.php 中包含此包。
在 app/config/config.yml 中添加您首选的搜索引擎
liip_search: clients: google_rest: api_key: '%google.api_key%' search_key: '%google.search_key%'
或如果您使用 JavaScript Google 自定义搜索引擎
liip_search: clients: google_cse: cse_id: '%google.search_key%'
使用
您可以使用 liip_search_box twig 函数在页面的任何位置显示搜索框
{{ liip_search_box(query, 'query-field-id', 'css-class') }}
您可以使用以下参数自定义搜索框
- query - 默认显示的查询
- fieldId - 要用于搜索输入字段的 HTML id。当页面上有多个搜索框时,请使用不同的 id,例如在页眉和内容中。
- cssClass - 应用到整个搜索框
<form>
的 CSS 类。
为搜索操作创建一个路由。最简单的方法是使用主项目路由.xml 中提供的提供路由.xml
liip_search:
resource: "@LiipSearchBundle/Resources/config/routing.xml"
默认为 URL /search
。如果您想使用不同的路由,请在包含路由时使用 prefix
选项,或使用 %liip_search.controller.search_action%
作为 _controller
的默认值来配置您自己的路由。
自定义模板
此包提供的搜索结果模板扩展了 LiipSearchBundle::layout.html.twig
模板。为了与其他网站集成,您有两个选择
- 创建
app/Resources/LiipSearchBundle/views/layout.html.twig
并使其继承您的基模板,在您想要放置搜索结果的位置添加一个liip_search_content
块。 - 创建
app/Resources/LiipSearchBundle/views/Search/search.html.twig
并构建自己的模板结构 - 您应该能够使用use
的search_results.twig.html
模板来获取liip_search_content
块。
当然,您也可以覆盖任何模板以自定义它们的功能。请参阅http://symfony.com/doc/master/book/templating.html#overriding-bundle-templates
配置参考
这是在liip_search
键下可以配置的完整参考。
search_factory
字符串,默认值:null
指定一个实现Liip\SearchBundle\SearchFactoryInterface
的自定义服务。此服务将由控制器用于创建Pagerfanta
实例以处理搜索。
如果您配置了搜索引擎服务之一,则不需要设置此字段。
search_route
字符串,默认值:liip_search
将处理提交的搜索请求的路由名称。
restrict_language
布尔值,默认值:false
如果要将此值更改为true,则请求搜索服务将结果限制为请求的语言。
Google Search REST API集成
配置这些选项之一将启用Google搜索引擎服务。它们位于clients.google_rest
下。
api_key
字符串,必需
search_key
字符串|数组,必需
标识您的Google搜索引擎的键。可能是一个键列表,根据区域设置索引以使用每个区域设置的不同的引擎。如果您通过单独的搜索引擎控制区域设置,则无需将restrict_language
设置为true,除非您想使自定义搜索引擎接收额外的语言限制。
api_url
字符串,默认值:https://www.googleapis.com/customsearch/v1
REST调用的Google搜索API URL
restrict_to_site
字符串,默认值:null
如果留空,将搜索配置为Google搜索引擎的所有网站。设置域名以限制到该域名。
Google Custom Search Engine集成
配置此部分将激活不同的控制器,用于渲染启用CSE搜索的JavaScript片段。此配置位于clients.google_cse
下。
cse_id
字符串|数组,必需
标识您的Google Custom Search Engine的键。可能是一个键列表,根据区域设置索引以使用每个区域设置的不同的引擎。CSE不支持restrict_language
,因此按语言使用不同的搜索引擎是您限制搜索结果语言的唯一选项。
故障排除
Google Custom Search Engine
如果您收到表示“从Google搜索引擎API收到空响应”的SearchException
,请尝试将输出的URL复制到浏览器中。您应该得到JSON响应,但可能它将具有错误状态。
如果您收到一个状态500且消息为空的错误,那么您可能需要在Google管理面板中更新搜索引擎。
添加您自己的搜索服务
实现Liip\SearchBundle\SearchInterface
并将其配置为服务。然后设置liip_search.search_client
为此服务名称。
待办事项
- 使用guzzle与Google REST API通信
- 添加对精炼(类似“更多类似”)的支持,并在搜索结果数组中包含可传递给SearchInterface::refineSearch的信息
- 公开更多谷歌搜索参数