远程原生 / search-for-kirby
真正找到你想要的东西。
Requires
README
⏸ 开发结束 - 欢迎接手项目
不幸的是,我缺乏时间和精力来积极维护此插件。我将暂时将其归档。请注意,它不支持Kirby 3.6+。如果有人想接管并继续此插件的开发,我将非常高兴 - 请与我联系。
搜索Kirby
入门
安装
下载,解压并将此存储库复制到/site/plugins/search
。
或者,您可以使用composer安装
composer require distantnative/search-for-kirby
决定您想使用哪个提供商(见下文以获取可用的提供商)。如果您使用Sqlite或Algolia提供商,请记住在首次运行之前创建索引(也见下文)。
更新
用新版本替换/site/plugins/search
文件夹。确保阅读发布说明以了解重大更改。
或者,如果您通过composer安装了插件,请运行
composer update distantnative/search-for-kirby
条目
该插件提供跨不同条目组合的全局搜索:pages
、files
和users
。
您可以在site/config/config.php
中定义应包含在索引中的条目(使用Kirby 查询语言),或者甚至完全禁用类型
'search' => [ 'entries' => [ 'pages' => 'site.find("projects").index', 'files' => false, // users will remain the default ] ]
默认情况下,以下集合包含在索引中
pages
site.index
files
site.index.files
users
kirby.users
字段
您可以在config.php
文件中定义应包含在搜索中的页面、文件和用户的内容字段
'search' => [ 'fields' => [ 'pages' => [ 'title' ], 'files' => [ 'filename' ], 'users' => [ 'email', 'name' ] ] ]
有几种方法可以在这些数组中定义字段
// Simply add the field 'title', // Add the field, but run it through a field method first 'text' => 'kirbytext', // Pass parameters to the field method 'text' => ['short', 50], // Use a callback function 'text' => function ($model) { return strip_tags($model->text()->kt()); } // Turn string field value into number (e.g. for Algolia filters) 'myNumberField' => function ($model) { return $model->myNumberField()->toFloat(); } 'myVirtualNumberField' => function ($model) { return $model->myNumberField()->toInt() + 5; } 'myDate' => function ($model) { return $model->anyDateField()->toTimestamp(); }
模板
您也可以在config.php
文件中定义应包含在搜索中的模板(或用户的角色)
'search' => [ 'templates' => [ 'pages' => function ($model) { return $model->id() !== 'home' && $model->id() !== 'error'; }, 'files' => null, 'users' => null ] ] `` If the value is null or an empty array, all templates are allowed. If it is false, all templates are excluded. There are several other options: ```php // simple whitelist array ['project', 'note', 'album'] // associative array [ 'project' => true, 'note' => false ] // callback function function ($model) { return $model->intendedTemplate() !== 'secret'; }
使用
在面板中
该插件用其全局搜索模态替换了默认的面板搜索(通过右上角的放大镜图标访问)
screencast.mp4
前端
该插件还替换了PHP API方法。由于插件提供全局搜索,最好与$site对象一起使用作为开始
$site->search('query', $options = []);
尽管如此,搜索也可以限制到更具体的集合(会有些性能损失)
$page->children()->listed()->filterBy('template', 'project')->search('query', $options = []);
该插件还添加了一个全局的search()
辅助函数
search(string $query, $options = [], $collection = null)
对于选项数组,您可以通过传递一个限制选项来指定要返回的结果数量。此外,您还可以指定一个操作选项(AND
或OR
)来指定多个搜索条件如何组合
collection('notes')->search($query, [ 'operator' => 'AND', 'limit' => 100 ]);
您收到的结果是Kirby\Cms\Collection
对象。
提供者
该插件捆绑了三个不同的搜索提供者。根据您的网站、需求和设置,其中之一可能比其他更适合。
sqlite
(默认)
使用SQLite FTS5扩展(必须可用)创建索引SQLite数据库。
在配置中,您可以重新定义数据库文件的位置,提供绝对路径。默认情况下,数据库文件将创建为site/logs/search/index.sqlite
。
// site/config/config.php 'search' => [ 'provider' => 'sqlite', 'sqlite' => [ 'file' => dirname(__DIR__, 2) . '/storage/search/index.sqlite' ] ]
模糊选项允许搜索不仅匹配单词的开头,还匹配单词内部的内容。根据内容,它可能会极大地增加索引数据库的大小(想想指数增长),尤其是在包含长文本字段时。您还可以定义要模糊的字段列表。
// site/config/config.php 'search' => [ 'provider' => 'sqlite', 'sqlite' => [ // Enabled for all fields 'fuzzy' => true, // Disabled completely 'fuzzy' => false, // Only for selected fields 'fuzzy' => [ 'pages' => ['title'], 'files' => ['caption', 'credits'] ], ] ]
您还可以定义一些自定义权重,以便将某些字段排名高于其他字段
// site/config/config.php 'search' => [ 'provider' => 'sqlite', 'sqlite' => [ 'weights' => [ 'title' => 10, 'caption' => 5 ], ] ]
algolia
使用此提供者,将Algolia搜索无缝添加到Kirby中
// site/config/config.php 'search' => [ 'provider' => 'algolia', 'algolia' => [ 'app' => ..., // Algolia App ID 'key' => ..., // Algolia private admin key (not just read-only!) 'index' => 'kirby' // name of the index to use/create 'options' => [] // options to pass to Algolia at search ] ]
生成索引
面板部分
要创建初始索引,该插件捆绑了一个小的面板部分,您可以从该部分触发索引的构建。例如,将以下部分添加到您的site.yml
蓝图
sections: search: type: search
钩子
默认情况下,该插件确保通过钩子在每个事件(创建页面、上传文件、更新内容等)更新搜索索引。因此,您无需担心每次编辑内容时都创建新索引。
要禁用通过钩子自动更新索引,请将以下内容添加到您的site/config/config.php
'search' => [ 'hooks' => false ]
Shell脚本
您还可以使用插件中包含的./index
Shell脚本从命令行构建索引。这可以是面板部分的替代方案(特别是对于非常大的索引文件)或替换未使用面板的设置中的钩子 - 例如在部署新提交或通过cron作业时触发。
./site/plugins/search/bin/index
如果您正在使用自定义文件夹设置,您将需要创建该脚本的修改版。如果您需要帮助,请与我们联系。
故障排除
此插件“按原样”提供,不提供任何保证。请自行承担使用风险,并在将其用于生产环境之前始终自行测试。如果您遇到任何问题,请创建问题。
缺少Sqlite扩展
在生成索引时,您可能会遇到“找不到驱动程序”的错误。这很可能意味着您的服务器配置缺少Sqlite扩展。其他用户已经成功激活了以下扩展
extension=sqlite3.so
extension=pdo_sqlite.so
回馈社会 💛
此插件完全免费,并遵循MIT许可证发布。然而,开发需要时间和精力。如果您在商业项目中使用它,或者只想支持我保持此插件活跃,请捐赠任意金额。