⏸ Développement terminé - projet ouvert au transfert
Malheureusement, je manque de temps et d'énergie pour soutenir activement le développement de ce plugin. Je vais archiver le plugin tel quel pour le moment. Sachez qu'il ne prend pas en charge Kirby 3.6+. Si quelqu'un souhaite prendre la relève et poursuivre le développement de ce plugin, j'en serais très heureux - n'hésitez pas à nous contacter.
Téléchargez, décompressez et copiez ce référentiel dans /site/plugins/search
.
Alternativement, vous pouvez l'installer avec composer :
composer require distantnative/search-for-kirby
Choisissez le fournisseur que vous souhaitez utiliser (voir ci-dessous pour les fournisseurs disponibles). Et n'oubliez pas de créer l'index (également ci-dessous) avant la première exécution, si vous utilisez le fournisseur SQLite ou Algolia.
Remplacez le dossier /site/plugins/search
par la nouvelle version. Assurez-vous de lire les notes de version pour connaître les modifications majeures.
Ou si vous avez installé le plugin via composer, exécutez :
composer update distantnative/search-for-kirby
Le plugin propose une recherche globale sur différentes entrées combinées : pages
, files
et users
.
Vous pouvez définir ce qui doit être inclus comme entrées dans l'index (en utilisant le langage de requête Kirby) ou même désactiver complètement un type dans votre site/config/config.php
:
' search ' => [
' entries ' => [
' pages ' => ' site.find("projects").index ' ,
' files ' => false ,
// users will remain the default
]
]
Par défaut, les collections suivantes sont incluses dans l'index :
pages
site.index
files
site.index.files
users
kirby.users
Vous pouvez définir dans votre fichier config.php
quels champs de contenu de vos pages, fichiers et utilisateurs inclure dans la recherche :
' search ' => [
' fields ' => [
' pages ' => [
' title '
],
' files ' => [
' filename '
],
' users ' => [
' email ' ,
' name '
]
]
]
Il existe plusieurs options pour définir les champs dans ces tableaux :
// 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 ();
}
Vous pouvez également définir dans votre fichier config.php
quels modèles (ou rôles dans le cas des utilisateurs) inclure dans la recherche :
' 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 ' ;
}
Le plugin remplace la recherche Panel par défaut (accès en haut à droite via l'icône en forme de loupe) par sa recherche modale globale :
Le plugin remplace également les méthodes API PHP. Étant donné que le plugin fournit une recherche globale, il est préférable de l'utiliser avec l'objet $site pour commencer :
$ site -> search ( ' query ' , $ options = []);
Néanmoins, la recherche peut également être limitée à des collections plus spécifiques (avec une certaine perte de performances) :
$ page -> children ()-> listed ()-> filterBy ( ' template ' , ' project ' )-> search ( ' query ' , $ options = []);
Le plugin ajoute également une fonction d'assistance globale search()
:
search (string $ query , $ options = [], $ collection = null )
Pour le tableau d'options, vous pouvez passer une option de limite pour spécifier le nombre de résultats à renvoyer. De plus, vous pouvez spécifier une option d'opérateur ( AND
ou OR
) pour spécifier la règle selon laquelle plusieurs termes de recherche sont combinés :
collection ( ' notes ' )-> search ( $ query , [
' operator ' => ' AND ' ,
' limit ' => 100
]);
Le résultat que vous recevez est un objet KirbyCmsCollection
.
Le plugin regroupe trois fournisseurs de recherche différents. En fonction de votre site, de vos besoins et de votre configuration, l'un d'entre eux peut être plus adapté que d'autres.
sqlite
(par défaut)Crée une base de données d'index SQLite à l'aide de l'extension SQLite FTS5 (doit être disponible).
Dans la configuration, vous pouvez redéfinir l'emplacement du fichier de base de données, en fournissant un chemin absolu. Par défaut, le fichier de base de données sera créé sous le nom site/logs/search/index.sqlite
.
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' file ' => dirname ( __DIR__ , 2 ) . ' /storage/search/index.sqlite '
]
]
L'option floue permet à une recherche de faire correspondre le contenu non seulement depuis le début des mots mais également à l'intérieur de ceux-ci. En fonction du contenu, cela peut augmenter considérablement la taille de la base de données d'index (pensez de manière exponentielle), en particulier lors de l'inclusion de champs de texte longs. Vous pouvez également définir des listes de champs à rendre floues.
// 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 ' ]
],
]
]
Vous pouvez également définir des pondérations personnalisées pour classer des champs spécifiques plus haut que d'autres :
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' weights ' => [
' title ' => 10 ,
' caption ' => 5
],
]
]
algolia
Ajoutez la recherche Algolia de manière transparente à Kirby avec ce fournisseur :
// 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
]
]
Pour créer un index initial, le plugin regroupe une petite section Panel à partir de laquelle vous pouvez déclencher la construction de l'index. Ajoutez la section suivante, par exemple, à votre plan site.yml
:
sections :
search :
type : search
Par défaut, le plugin veille à mettre à jour l'index de recherche à chaque événement (création d'une page, téléchargement d'un fichier, mise à jour du contenu etc.) via des hooks. Vous n'avez donc pas à vous soucier de créer un nouvel index à chaque fois que le contenu est modifié.
Pour désactiver les mises à jour automatiques d'index via des hooks, ajoutez ce qui suit à votre site/config/config.php
:
' search ' => [
' hooks ' => false
]
Vous pouvez également créer l'index à partir de la ligne de commande avec le script shell ./index
inclus dans le plugin. Cela peut être une alternative à la section Panel (en particulier pour un très gros fichier d'index) ou remplacer les hooks dans les configurations qui n'utilisent pas le Panel – puis déclenchés par exemple lors du déploiement d'un nouveau commit ou via une tâche cron.
./site/plugins/search/bin/index
Si vous utilisez une configuration de dossier personnalisée, vous devrez créer une version modifiée de ce script. Contactez-nous si vous avez besoin d'aide.
Ce plugin est fourni « tel quel » sans aucune garantie. Utilisez-le à vos propres risques et testez-le toujours vous-même avant de l'utiliser dans un environnement de production. Si vous rencontrez un problème, veuillez créer un problème.
Lors de la génération de l'index, vous pourriez rencontrer l'erreur Impossible de trouver le pilote. Cela signifie très probablement que la configuration de votre serveur ne contient pas les extensions SQLite. Il a été possible pour les autres utilisateurs d'activer les extensions suivantes :
extension=sqlite3.so
extension=pdo_sqlite.so
Ce plugin est entièrement gratuit et publié sous licence MIT. Cependant, le développement nécessite du temps et des efforts. Si vous l'utilisez dans un projet commercial ou si vous souhaitez simplement me soutenir pour maintenir ce plugin en vie, veuillez faire un don de votre choix.