⏸ Desenvolvimento encerrado - projeto aberto para entrega
Infelizmente, estou sem tempo e energia para apoiar ativamente o desenvolvimento deste plugin. Arquivarei o plugin como está por enquanto. Esteja ciente de que ele não suporta Kirby 3.6+. Se alguém quiser assumir e continuar o desenvolvimento deste plugin, ficarei muito feliz - entre em contato.
Baixe, descompacte e copie este repositório para /site/plugins/search
.
Alternativamente, você pode instalá-lo com o compositor:
composer require distantnative/search-for-kirby
Decida qual provedor você deseja usar (veja abaixo os provedores disponíveis). E não se esqueça de criar o índice (também abaixo) antes da primeira execução, se estiver usando o provedor Sqlite ou Algolia.
Substitua a pasta /site/plugins/search
pela nova versão. Certifique-se de ler as notas de lançamento para obter alterações importantes.
Ou se você instalou o plugin via compositor, execute:
composer update distantnative/search-for-kirby
O plugin oferece uma pesquisa global em diferentes entradas combinadas: pages
, files
e users
.
Você pode definir o que deve ser incluído como entradas no índice (usando a linguagem de consulta Kirby) ou até mesmo desabilitar completamente um tipo em seu site/config/config.php
:
' search ' => [
' entries ' => [
' pages ' => ' site.find("projects").index ' ,
' files ' => false ,
// users will remain the default
]
]
Por padrão, as seguintes coleções estão incluídas no índice:
pages
site.index
files
site.index.files
users
kirby.users
Você pode definir em seu arquivo config.php
quais campos de conteúdo de suas páginas, arquivos e usuários incluir na busca:
' search ' => [
' fields ' => [
' pages ' => [
' title '
],
' files ' => [
' filename '
],
' users ' => [
' email ' ,
' name '
]
]
]
Existem várias opções de como definir campos nessas matrizes:
// 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 ();
}
Você também pode definir em seu arquivo config.php
quais templates (ou funções no caso de usuários) incluir na busca:
' 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 ' ;
}
O plugin substitui a pesquisa padrão do Painel (acesso no canto superior direito através do ícone da lupa) pelo seu modal de pesquisa global:
O plugin também substitui os métodos da API PHP. Como o plugin fornece pesquisa global, é melhor usá-lo com o objeto $site para começar:
$ site -> search ( ' query ' , $ options = []);
No entanto, a pesquisa também pode ser limitada a coleções mais específicas (com alguma perda de desempenho):
$ page -> children ()-> listed ()-> filterBy ( ' template ' , ' project ' )-> search ( ' query ' , $ options = []);
O plugin também adiciona uma função auxiliar search()
:
search (string $ query , $ options = [], $ collection = null )
Para o array de opções você pode passar uma opção limit para especificar o número de resultados a serem retornados. Além disso, você pode especificar uma opção de operador ( AND
ou OR
) para especificar a regra de combinação de vários termos de pesquisa:
collection ( ' notes ' )-> search ( $ query , [
' operator ' => ' AND ' ,
' limit ' => 100
]);
O resultado que você recebe é um objeto KirbyCmsCollection
.
O plugin agrupa três provedores de pesquisa diferentes. Dependendo do seu site, necessidades e configuração, um deles pode ser mais adequado do que outros.
sqlite
(padrão)Cria um banco de dados SQLite de índice usando a extensão SQLite FTS5 (deve estar disponível).
Na configuração, você pode redefinir o local do arquivo de banco de dados, fornecendo um caminho absoluto. Por padrão, o arquivo de banco de dados será criado como site/logs/search/index.sqlite
.
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' file ' => dirname ( __DIR__ , 2 ) . ' /storage/search/index.sqlite '
]
]
A opção difusa permite uma pesquisa para combinar o conteúdo não apenas desde o início das palavras, mas também dentro delas. Dependendo do conteúdo, pode aumentar drasticamente o tamanho do banco de dados de índice (pense exponencialmente), especialmente ao incluir campos de texto longos. Você também pode definir listas de campos para torná-las confusas.
// 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 ' ]
],
]
]
Você também pode definir alguns pesos personalizados para classificar campos específicos acima de outros:
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' weights ' => [
' title ' => 10 ,
' caption ' => 5
],
]
]
algolia
Adicione a pesquisa Algolia perfeitamente ao Kirby com este provedor:
// 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
]
]
Para criar um índice inicial, o plug-in agrupa uma pequena seção de painel a partir da qual você pode iniciar a construção do índice. Adicione a seguinte seção, por exemplo, ao seu blueprint site.yml
:
sections :
search :
type : search
Por padrão, o plugin atualiza o índice de pesquisa em cada evento (criação de uma página, upload de um arquivo, atualização de conteúdo etc.) por meio de ganchos. Portanto, você não precisa se preocupar em criar um novo índice sempre que o conteúdo for editado.
Para desativar atualizações automáticas de índice por meio de ganchos, adicione o seguinte ao seu site/config/config.php
:
' search ' => [
' hooks ' => false
]
Você também pode construir o índice a partir da linha de comando com o script shell ./index
incluído no plugin. Isto pode ser uma alternativa à seção Painel (especialmente para um arquivo de índice muito grande) ou substituir ganchos em configurações que não usam o Painel – então acionado, por exemplo, ao implantar um novo commit ou através de um cronjob.
./site/plugins/search/bin/index
Se estiver usando uma configuração de pasta personalizada, você terá que criar uma versão modificada desse script. Entre em contato, se precisar de ajuda.
Este plugin é fornecido "como está", sem garantias. Use-o por sua conta e risco e sempre teste-o antes de usá-lo em um ambiente de produção. Se você encontrar algum problema, crie um problema.
Ao gerar o índice, você pode encontrar o erro não foi possível encontrar o driver. Isso provavelmente significa que a configuração do seu servidor não possui as extensões SQLite. Funcionou para outros usuários ativar as seguintes extensões:
extension=sqlite3.so
extension=pdo_sqlite.so
Este plugin é totalmente gratuito e publicado sob a licença do MIT. No entanto, o desenvolvimento requer tempo e esforço. Se você o estiver usando em um projeto comercial ou apenas quiser me apoiar para manter este plugin ativo, faça uma doação de sua escolha.