internachi / blade-alpine-instantsearch
Algolia即时搜索作为Blade/Alpine.js组件
0.5.0
2024-03-12 20:47 UTC
Requires
- php: >=7.4
- illuminate/support: ^8.71|^9|^10|^11|dev-master
- illuminate/view: ^8.71|^9|^10|^11|dev-master
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.39
- orchestra/testbench: ^6|^7|^8|^9|9.x-dev|dev-master
- phpunit/phpunit: ^9.0|^10.5
README
这是一个工作中的包,允许您完全使用Laravel Blade组件来实现Algolia InstantSearch。
使用方法
组件
并非所有组件都已实现,并且在1.0版本发布之前,大多数UI都可能发生变化。当前的实现是一个概念验证,我们将在接下来的几个月内在一些内部工具中对其进行改进。所有组件都应该在无渲染模式下工作,但UI仅实现了以下内容
<x-instantsearch>
- 提供配置和上下文的包装器<x-instantsearch::search-box>
- 搜索输入<x-instantsearch::hits>
- 渲染搜索结果/命中项<x-instantsearch::hit>
- 渲染命中项中的特定属性<x-instantsearch::highlight>
- 根据输入渲染特定属性的高亮显示<x-instantsearch::numeric-menu>
- 通过数值(如价格/投票等)进行过滤<x-instantsearch::refinement-list>
- 通过标签/类别等进行过滤<x-instantsearch::pagination>
- 分页结果
所有组件尽可能映射到InstantSearch.js(实际上,API的大部分都是自动从JS文档生成的)。目前,最好参考JS文档进行配置。
Alpine
在内部,所有组件都使用Alpine.js v3来处理状态和渲染。例如,搜索框组件使用Alpine的x-model
跟踪query
值,并使用x-on:input
将该值传递给instantsearch的refine()
方法。看起来像这样
<input type="text" placeholder="Search" x-model="query" @input="refine(query)" />
在内部,此包将其自身注入到Blade组件的属性中,以连接到instantsearch实例——其余部分只是Alpine和Blade。
使用现有模板
所有组件都预捆绑了与使用Tailwind CSS的任何项目兼容的模板。如果您想调整特定模板,可以使用以下方式发布自己的版本
php artisan vendor:publish --tag=instantsearch
无渲染模式
如果您更喜欢对每个组件有更细粒度的控制,您可以启用renderless
模式,该模式仅连接组件状态,但完全将UI留给您。
您可以通过在每个组件上使用组件的renderless
属性来逐个组件地这样做
<x-instantsearch-refinement-list attribute="brand" renderless> <!-- Do whatever you want here --> </x-instantsearch-refinement-list>
或者,您可以通过以下方式发布包配置文件
php artisan vendor:publish --tag=instantsearch
然后启用renderless
配置选项,这将使所有组件默认以该模式工作。