⏸ Desarrollo finalizado - proyecto abierto a entrega
Desafortunadamente, me falta tiempo y energía para mantener activamente el desarrollo de este complemento. Archivaré el complemento tal como está por el momento. Tenga en cuenta que no es compatible con Kirby 3.6+. Si alguien quisiera hacerse cargo y continuar con el desarrollo de este complemento, estaría muy feliz; por favor, póngase en contacto.
Descargue, descomprima y copie este repositorio en /site/plugins/search
.
Alternativamente, puedes instalarlo con Composer:
composer require distantnative/search-for-kirby
Decida qué proveedor desea utilizar (consulte a continuación los proveedores disponibles). Y no olvide crear el índice (también a continuación) antes de la primera ejecución, si utiliza el proveedor Sqlite o Algolia.
Reemplace la carpeta /site/plugins/search
con la nueva versión. Asegúrese de leer las notas de la versión para conocer los cambios importantes.
O si instaló el complemento a través del compositor, ejecute:
composer update distantnative/search-for-kirby
El complemento ofrece una búsqueda global en diferentes entradas combinadas: pages
, files
y users
.
Puede definir qué se debe incluir como entradas en el índice (usando el lenguaje de consulta Kirby) o incluso deshabilitar un tipo por completo en su site/config/config.php
:
' search ' => [
' entries ' => [
' pages ' => ' site.find("projects").index ' ,
' files ' => false ,
// users will remain the default
]
]
De forma predeterminada, las siguientes colecciones se incluyen en el índice:
pages
site.index
files
site.index.files
users
kirby.users
Puede definir en su archivo config.php
qué campos de contenido de sus páginas, archivos y usuarios incluir en la búsqueda:
' search ' => [
' fields ' => [
' pages ' => [
' title '
],
' files ' => [
' filename '
],
' users ' => [
' email ' ,
' name '
]
]
]
Hay varias opciones para definir campos en estas matrices:
// 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 ();
}
También puedes definir en tu archivo config.php
qué plantillas (o roles en el caso de usuarios) incluir en la búsqueda:
' 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 ' ;
}
El complemento reemplaza la búsqueda predeterminada del Panel (acceso en la parte superior derecha a través del ícono de la lupa) con su modo de búsqueda global:
El complemento también reemplaza los métodos API de PHP. Dado que el complemento proporciona búsqueda global, es mejor utilizarlo con el objeto $site como punto de partida:
$ site -> search ( ' query ' , $ options = []);
Sin embargo, la búsqueda también puede limitarse a colecciones más específicas (con cierta pérdida de rendimiento):
$ page -> children ()-> listed ()-> filterBy ( ' template ' , ' project ' )-> search ( ' query ' , $ options = []);
El complemento también agrega una función auxiliar search()
:
search (string $ query , $ options = [], $ collection = null )
Para la matriz de opciones, puede pasar una opción de límite para especificar la cantidad de resultados que se devolverán. Además, puede especificar una opción de operador ( AND
u OR
) para especificar la regla en la que se combinan varios términos de búsqueda:
collection ( ' notes ' )-> search ( $ query , [
' operator ' => ' AND ' ,
' limit ' => 100
]);
El resultado que recibe es un objeto KirbyCmsCollection
.
El complemento incluye tres proveedores de búsqueda diferentes. Dependiendo de su sitio, necesidades y configuración, uno de ellos puede ser más adecuado que otros.
sqlite
(predeterminado)Crea una base de datos SQLite de índice utilizando la extensión SQLite FTS5 (debe estar disponible).
En la configuración, puede redefinir la ubicación del archivo de la base de datos, proporcionando una ruta absoluta. De forma predeterminada, el archivo de base de datos se creará como site/logs/search/index.sqlite
.
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' file ' => dirname ( __DIR__ , 2 ) . ' /storage/search/index.sqlite '
]
]
La opción difusa permite realizar una búsqueda para encontrar contenido no sólo desde el principio de las palabras sino también dentro de ellas. Dependiendo del contenido, puede aumentar drásticamente el tamaño de la base de datos de índice (piense exponencialmente), especialmente cuando se incluyen campos de texto largos. También puede definir listas de campos para hacerlas borrosas.
// 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 ' ]
],
]
]
También puede definir algunos pesos personalizados para clasificar campos específicos por encima de otros:
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' weights ' => [
' title ' => 10 ,
' caption ' => 5
],
]
]
algolia
Agregue la búsqueda de Algolia sin problemas a Kirby con este proveedor:
// 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 crear un índice inicial, el complemento incluye una pequeña sección de Panel desde la cual puede iniciar la creación del índice. Agregue la siguiente sección, por ejemplo, a su plano site.yml
:
sections :
search :
type : search
De forma predeterminada, el complemento se asegura de actualizar el índice de búsqueda en cada evento (creación de una página, carga de un archivo, actualización de contenido, etc.) mediante enlaces. Por lo tanto, no necesita preocuparse por crear un nuevo índice cada vez que se edita el contenido.
Para desactivar las actualizaciones automáticas de índice mediante ganchos, agregue lo siguiente a su site/config/config.php
:
' search ' => [
' hooks ' => false
]
También puede crear el índice desde la línea de comando con el script de shell ./index
incluido en el complemento. Esto puede ser una alternativa a la sección Panel (especialmente para un archivo de índice muy grande) o reemplazar los ganchos en configuraciones que no usan el Panel; luego se activan, por ejemplo, al implementar una nueva confirmación o mediante un cronjob.
./site/plugins/search/bin/index
Si está utilizando una configuración de carpeta personalizada, deberá crear una versión modificada de ese script. Póngase en contacto si necesita ayuda.
Este complemento se proporciona "tal cual" sin garantías. Úselo bajo su propia responsabilidad y pruébelo siempre usted mismo antes de usarlo en un entorno de producción. Si encuentra algún problema, cree un problema.
Al generar el índice, es posible que encuentre el error No se pudo encontrar el controlador. Lo más probable es que esto signifique que a la configuración de su servidor le faltan las extensiones Sqlite. A otros usuarios les ha funcionado activar las siguientes extensiones:
extension=sqlite3.so
extension=pdo_sqlite.so
Este complemento es completamente gratuito y está publicado bajo la licencia MIT. Sin embargo, el desarrollo necesita tiempo y esfuerzo. Si lo está utilizando en un proyecto comercial o simplemente quiere apoyarme para mantener vivo este complemento, haga una donación de su elección.