远程原生/search-for-kirby

此软件包已被弃用,不再维护。未建议替代软件包。

真正找到你想要的东西。

资助软件包维护!
paypal.me/distantnative

安装: 733

依赖项: 0

建议者: 0

安全: 0

星标: 41

关注者: 2

分支: 2

开放问题: 6

类型:kirby-plugin

1.1.1 2021-02-13 10:01 UTC

This package is auto-updated.

Last update: 2022-03-27 09:16:25 UTC


README

⏸ 开发结束 - 欢迎接手项目
不幸的是,我缺乏时间和精力来积极维护此插件。我将暂时将其归档。请注意,它不支持Kirby 3.6+。如果有人想接管并继续此插件的开发,我将非常高兴 - 请与我联系。


搜索Kirby

Version Dependency License Donate

Screenshot

入门

安装

下载,解压并将此存储库复制到/site/plugins/search

或者,您可以使用composer安装

composer require distantnative/search-for-kirby

决定您想使用哪个提供商(见下文以获取可用的提供商)。如果您使用Sqlite或Algolia提供商,请记住在首次运行之前创建索引(也见下文)。

更新

用新版本替换/site/plugins/search文件夹。确保阅读发布说明以了解重大更改。

或者,如果您通过composer安装了插件,请运行

composer update distantnative/search-for-kirby

条目

该插件提供跨不同条目组合的全局搜索:pagesfilesusers

您可以在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)

对于选项数组,您可以通过传递一个限制选项来指定要返回的结果数量。此外,您还可以指定一个操作选项(ANDOR)来指定多个搜索条件如何组合

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许可证发布。然而,开发需要时间和精力。如果您在商业项目中使用它,或者只想支持我保持此插件活跃,请捐赠任意金额