Quand je travaillais à enrichir la documentation de Cecil, je me suis dit qu’il serait pertinent d’offrir un moteur de recherche full text aux utilisateurs.
- Nous soutenir
- Contributeurs
- Charte graphique
- Administrateurs
- À propos de Jamstatic
- Actualités
- Références
- Exemples de code
- Qu'est-ce que vous faites quand vous ne travaillez pas sur Jekyll ?
- Peux-tu nous dire comment tu as été amené à t'impliquer dans Jekyll et ce qui s'est passé depuis pour aboutir à la mise en ligne de la version 3.0 de Jekyll ?
- Tu as débuté avec la 0.12.1 ?
- Quelle fut ta première expérience de programmation ?
- Quelle fut ta première rencontre avec les générateurs de site statique modernes ?
- C'était donc une question de masse critique ? Il y avait pas mal de gens, donc tu savais que c'était vivant et actif
- Que souhaites-tu aux générateurs de site statique ?
- Comment est-il possible de faire cela ?
- Le dynamique a l’air bien plus intéressant !
- Oui statique ça fait un peu péjoratif dans ce contexte
- En tant que mainteneur de Jekyll, qu'aimerais-tu dire, communiquer à ceux qui s'intéressent aux technologies autour du web statique moderne ? La tribune est à toi
- Prérequis
- Pages utilisateur et organisation
- Pages projet
- Les thèmes peuvent désormais fournir des assets statiques et dynamiques dans le dossier /assets
- Les filtres relative_url et absolute_url
- site.url est maintenant défini pour le serveur de développement
- Et bien plus encore
- Prérequis
- Préparer son thème
- Tester son thème
- Un guide complet pour coder et déployer un site, tout en ligne de commande
- C’est quoi Jekyll ?
- Développons un portfolio !
- Plongeons dans les fichiers
- Modifier les paramètres de votre site
- Ajoutons notre premier article !
- YAML front matter
- Liquid
- Écrire un article pour de vrai
- Un autre exemple d’article en .md
- Ajoutons un peu de CSS à tout ça
- Sass
- Versionnement avec Git
- Configurer Git
- Créer un dépôt sur GitHub
- GitHub Pages
- Mes conseils supplémentaires
- Système de grille
- Rythme vertical
- Fin
- Passer à la version 2 de Staticman
- Ajout du support des fils de commentaires
- Ajout du support des notifications par mail
- La transformation de Jekyll
- Le cœur de Jekyll
- Test exhaustif d’une génération
- Génération des fichiers sans l’option brouillons
- Génération des fichiers avec l’option brouillon
- Comment et pourquoi en êtes-vous arrivés à choisir un générateur de site statique comme clé de voûte de votre processus de publication aux éditions The Getty ? Pourquoi ne pas avoir opté pour un développement natif ?
- Comment votre équipe s'est appropriée ce nouveau workflow ? L'appropriation a-t-elle été facile ?
- Est-ce que tu penses qu'un process à base de technologies web peut remplacer le couple démoniaque Word et InDesign ? Particulièrement en ce qui concerne la facilité d’écriture et de structuration des contenus (WYSIWYG) ainsi que la mise en page (InDesign) ?
- Est-ce que ce nouveau process augmente la qualité des publications de The Getty ?
- Est-ce que ce nouveau workflow vous fait gagner du temps et de l’argent ? Y’a t-il une différence de prix de revient pour les livres, y compris pour les livres papier ?
- Quelles sont les contraintes auxquelles vous vous heurtez encore aujourd’hui ? Quel serait votre workflow idéal ?
- Est-ce que tu penses que d’autres maisons d’édition vont adopter à leur tour cette stratégie avec des générateurs de site statique (pas de WYSIWYG, un balisage léger, pas de base de données, des métadonnées YAML, versionnement avec Git, etc.) ? Est-ce qu'un courant pourrait se former autour de ce concept ?
- Les rudiments d’un générateur de site statique
- Allons au cœur du problème
- Les rudiments de Harp
- C’est pas si compliqué, non ?
- Mon rapport et mon livre
- Du YAML front matter, une boucle for et pas mal de modules
- Le workflow Git
- Utilisation de Netlify
- Configuration de Jekyll
- De quoi parle-t-on ?
- Prérequis
- Jamstack et développement statique
- 1. Référencement
- 2. Performance
- 3. Sécurité
- 4. Déploiement & Workflow
- 5. Une communauté en pleine expansion
- Est-ce que c'est fait pour moi ?
- Écouter l’épopée de Smashing Magazine
- Un travail titanesque
- Ainsi naquirent nos rêves d’open source
- Notre CMS open source
- Putain, on l’a fait !
- Configurer Netlify
- Authentification via GitHub
- Ajout des fichiers de l’admin
- Accéder à l’administration
- Et voilà !
- Choisir un générateur de site statique
- Configurer Hugo
- Se plonger dans Hugo : quelques détails techniques
- Héberger chez Netlify
- Résumé de ma configuration actuelle
- Objectifs futurs
- Quelques mots de conclusion ?
- Quels problèmes Gatsby essaie-t-il de résoudre ?
- Comment se positionne Gatsby par rapport aux autres générateurs de sites statiques, qu'ils soient basés sur React ou non ?
- Quelle longévité peut-on espérer pour Gatsby ?
- Que prévoyez-vous ensuite ?
- Hugo : un générateur de site statique super rapide
- Tutoriel Hugo : site, produits, modèles et déploiement
- Démo de site Hugo et dépôt GitHub
- Conclusion et ressources supplémentaires
- Introduction
- Fondamentaux des templates Hugo
- Prenons de la hauteur
- La fin et le début
- Comment fonctionnent les thèmes ?
- Comment utiliser un thème ?
- Quels thèmes puis-je utiliser ?
- Trucs et astuces pour créer un super thème
- Bien configurer son environnement
- C’est parti
- La structure de fichiers
- Développer votre thème
- Ajouter des contenus d’exemple
- Soumettre sa gem de thème
- Les thèmes distants sur GitHub Pages
- Tests et mises à jour
- Bonjour Bjørn Erik, comment t'es-tu retrouvé impliqué dans Hugo ?
- Les problèmes résolus par Hugo
- Comment fait Hugo pour aller si vite ?
- Quels sont les sites les plus visibles qui utilisent Hugo ?
- Comment se porte le projet actuellement ?
- Hugo est open source. Comment se passe la gestion du projet ?
- Qui vous soutient dans le développement ?
- Quelle est la prochaine étape pour Hugo ?
- Bonjour Bud, tu es un observateur et un défenseur de ce que beaucoup désignent encore comme de simples sites statiques. Comment les choses ont-elles évolué depuis quelques années ?
- En 2015 Tom Preston-Werner disait lors de la JekyllConf que 80% du Web pourrait être statique, est-ce le cas aujourd’hui ?
- Les administrations publiques aux États-Unis (avec 18F), au Royaume-Uni (avec Alphagov) ou en France (avec Etalab) semblent privilégier ce type de workflow. Pourquoi à ton avis est-ce si intéressant pour les administrations publiques et les organismes ouverts ?
- Nous voyons aussi de plus en plus d’agences, de start-ups adopter cette manière de travailler par défaut quand il s'agit de publier des contenus. Quels sont selon toi les projets les plus susceptibles de faire réfléchir à deux fois avant de dégaîner son bon vieux CMS ?
- Mais alors pourquoi les agences n'adoptent-elles pas ce processus de travail ?
- Si ce workflow est naturel pour les développeurs Web, les utilisateurs finaux préfèrent utiliser une interface graphique complète. Ces deux manières de travailler sont-elles compatibles ?
- Quel est ton workflow actuel ? Qu'est-ce qui te plaît tant dedans ?
- Comment vends-tu cette manière de travailler à tes clients ?
- Que souhaites-tu pour cette stack Web moderne à court terme ?
- Bonjour Michael, comment te présenter ?
- Comment en es-tu venu à adopter Jekyll comme outil de publication ?
- Sur quels types de sites travailles-tu ?
- Qu'est-ce qui te plait dans le fait de travailler avec des générateurs de site statique ?
- Quelle est ta fonctionnalité préférée dans Jekyll ?
- Quelle est la fonctionnalité qui te manque le plus ?
- Pourquoi y a-t-il aussi peu de thèmes de qualité pour Jekyll selon toi?
- Pourquoi n'y a-t-il pas plus de designers Web qui travaillent avec des générateurs de site statique ?
- Ton thème hpster a été porté pour Hugo, est-ce que tu as testé ?
- Avantages
- Prise de conscience
- Les fonctionnalités dynamiques
- Le panier d’achat
- En résumé
- Hugo
- Performance
- Les données
- Exemple d’architecture
- Déploiement
- Questions en suspend
- Pour aller plus loin
- Mais d’abord, comment démarrer simplement
- 1. Déploiements atomiques avec publication et retour en arrière immédiats
- 2. Notifications et permaliens
- 3. Branches de déploiement et sous-domaines
- 4. Tests A/B, Tests A/B avec plusieurs variantes ou tests séparés
- 5. Commandes de génération contextuelles
- 6. Gestion des certificats SSL et SSL gratuit avec Let’s Encrypt
- 7. Lancer des tests avec l’intégration continue de Netlify
- 8. Gestion des formulaires
- 9. Redirections, réécritures et proxy
- 10. Contrôle des entêtes personnalisés
- Ça en fait 10, mais ce n'est pas tout
- L'API WordPress
- Ajouter vos articles dans Metalsmith
- Étape suivante
- Le contexte et le point
- Le point de la page
- Les fichiers partiels
- Conclusion
- C'est quoi Scratch ?
- Manipuler des tableaux et des maps
- Attention au périmètre et au contexte…
- .Scratch après Go 1.11
- Flexibilité
- Pariez sur JavaScript
- Eleventy n'est pas un framework JavaScript
- Testez Eleventy !
- 1. Configurer Hugo
- 2. Configurer votre site
- 3. Personnaliser votre site
- 4. Personnaliser votre thème
- 5. Prochaine étape
- Un site de quatre pages avec un entête, une navigation et un pied de page consistants
- Utiliser un seul gabarit pour nos pages
- Rendre la navigation active
- Rédiger du contenu en Markdown
- Développer de vrais composants
- Créer autant de composants que vous voulez
- Un avis rapide sur les sites statiques
- Allez de l’avant et passer au statique
- Making platforms promote performance
- Ajouter une recherche sur un site statique
- Une chouette soirée
- Obtenir vos clefs d’API
- Connecter votre source de données
- Préparer les données pour Algolia
- Envoi des données à Algolia
- Configuration des paramètres
- Connecter le front-end
- Le Projet
- Statut des relations avant Related Content: c'est compliqué
- La fonctionnalité Related Content d’Hugo
- Conclusion
- Jekyll
- Hugo
- En résumé
- Introduction
- Installation de l’API
- Développement du site statique
- Conclusion
- Pourquoi maintenant ?
- L'histoire de la Jamstack
- Le paysage de la Jamstack
- Les bénéfices
- Et ensuite ?
- Conclusion
- Traitement des assets
- Et ensuite ?
- Conclusion
- Configurer les langues
- Traduire nos pages
- Créer des liens vers les traductions 🔗
- Les bundles de page
- Configurer nos URLs
- Localisation des chaînes de caractères
- Mettre les chaînes au pluriel
- Conclusion 🏁
- La configuration est clé
- CircleCI
- TravisCI
- Drone
- GitLab CI
- Jenkins
- Choisir l'outil qui vous convient le mieux
- Configuration de Jekyll
- POSSE avec Micro.blog
- Publication
- TL;DR
- Inclusions : à consommer avec modération
- Faites confiance aux gemmes compilées en C
- Si vous pouvez l'éviter, n'utilisez pas LSI
- Markdown : choisissez la bonne variante
- Faites confiance à la Team pour aller dans la bonne direction
- Qu'en est-il de mon chantier multilingue ?
- Protocole expérimental
- Présentation d'Eleventy
- Avant de commencer
- Installer Eleventy
- La configuration
- Les gabarits de mise en forme
- Les variables
- Les filtres
- Les includes
- Les collections
- Utiliser les données de répertoire pour définir les paramètres par défaut
- Les fichiers statiques
- Considérations finales
- Montez d'un cran
- Les collections à base de tags
- Les collections sur mesure
- Comment ça marche à l'usage ?
- Implémentation
- De WordPress à Hugo
- Tout est page
- Modèles et hiérarchie
- La boucle et les données
- Les shortcodes
- Paramètres
- Formats de sortie
- Traitement des assets
- Thèmes et Plugins VS Composants de Thème
- On en parle de l'interface du CMS ou pas ?
- Autres fonctionnalités notables
- Conclusion
- C'est quoi la Jamstack ?
- Bien démarrer
- À propos
- Qu'est-ce qu'une appli Web ?
- Gmail
- Twitter (Progressive Web Application)
- Gatsby est taillé pour les applis Web
- Pourquoi utiliser Gatsby pour une appli Web ?
- La Coquille Applicative
- Et voici… Gatsby Mail ! (Qui ne sert qu'à des fins de démonstration !)
- Devez-vous passer de GitHub Pages à Netlify ?
- Migrer de GitHub Pages à Netlify
- Ajouter Netlify CMS à un site existant
- Notre retour d'expérience avec Netlify + Netlify CMS
- Communauté et contribution
- Modulariser le CMS
- L'émergence du maillage de contenus
- Trois domaines avec une innovation rapide
- Intégrer les technologies modernes en déléguant le travail
- Le paysage du développement web moderne
- Choisir un générateur de site
- Satisfait de mon choix
- Définition des locales
- Filtre de localisation de date
- Localisation des collections
- Localisation des layouts et des fichiers partiels
- Flexible par nature
- Les différents types de CMS headless
- Structure du projet
- Configuration de DatoCMS
- Configuration d'Eleventy
- Utilisation des fichiers de données JavaScript
- Générer une liste paginée des articles de blog avec 11ty
- Générer les pages individuelles pour les articles dans 11ty
- Déclencher automatiquement les builds
- Mise en place
- Les langues du site
- Ajout des clés de traduction
- Coder notre sélecteur de langue
- Les CMS basés sur Git
- Les CMS API-first
- Les bénéfices des CMS basés sur Git
- Les bénéfices des CMS basés sur des APIs
- Les défis posés par les CMS basés sur Git
- Les défis posés par les CMS basés sur des APIs
- Alors quel CMS headless devez vous choisir ?
- Liste de plate-formes CMS basées sur Git
- Liste de plates-formes CMS basées sur des APis
- Pourquoi utiliser partialCached ?
- Les variantes de partiel
- Haussons le niveau d'un cran 💪
- Et les langues ? 🇫🇷🇬🇧
- Améliorer votre temps de génération ⏱️
- Conclusion
- Les bénéfices de la Jamstack
- Expliquer la Jamstack au client
- En résumé…
- Quelques points à retenir
- Coder nos partiels de fonction
- Gestion des arguments
- Mise en cache !
- Des améliorations possibles ?
- Conclusion
- Étape 1 : s'inscrire sur webmentions.io
- Comment tout ça va marcher
- Récupération des webmentions
- Filtres pour la génération
- Afficher les mentions
- Sautons courageusement dans l’inconnu…
- Poursuivez en ajoutant des Microformats
- Ressources additionnelles
- Créer un module Hugo
- Conclusion
- Ressources complémentaires
- À quoi Gatsby est-il bon ?
- Où est le problème ?
- GraphQL est excessif pour la plupart des sites statiques
- Déboguer est un cauchemar
- Gatsby pourrait bien être trop intelligent à ses dépens
- Les plugins
- Next.js c'est top pour des sites statiques
- Gatsby et moi c'est terminé
- Privilégier le côté serveur
- Améliorer le côté client, s’il est indispensable
- Les appels à l’API uniquement côté client ont parfois plus de sens
- Promouvoir la AJMstack Mstack
- Les tests
- Les deux types de générateurs de sites statiques
- Mon hypothèse
- Les résultats sont arrivés
- Synthèse des résultats
- Qu'en conclure ?
- Conclusion
- Introduction
- Bataille d'égo de CEO
- L'API de WordPress pour le blog de Gatsby
- Les annonces de la première Next.js conf
- Gatsby simplifie la génération de pages
- Nuxt.js de plus en plus statique
- Hugo de mieux en mieux outillé pour le JavaScript
- Tailwind 2.0
- Eleventy en route vers le million de téléchargements
- Comment ne pas faire subir le coût des frameworks à ses visiteurs ?
- Intervenants
- Le contexte
- Choix des générateurs et du CMS Headless
- Commençons avec Next.js
- Génération des 11 000 pages et premier blocage
- La surprise ou le blocage qu'on attendait pas
- La régénération incrémentale à la rescousse
- La solution retenue
- Prototype privé
- Pourquoi un site statique ?
- Pourquoi Snipcart ?
- Mise en œuvre
- Gestion de contenu (CMS)
- Conclusion
- Qu’est-ce que GitHub Pages ?
- Qu’est-ce que GitHub Actions ?
- En pratique, comment faire ?
- Quelle solution technique ?
- Étapes clefs
- Mise en œuvre
- Conclusion
La documentation de Cecil est composée de moins de 10 pages : une par thématique (configuration, gestion des contenus, création des templates, etc.) et chacune d’elle contient de nombreuses sections, accessibles par des ancres.
Aussi, il est important que les résultats retournés par un moteur de recherche soient granulaires, c’est à dire qu’ils ciblent ces sections au sein d’une page.
Quelle solution technique ?
Google CSE
Dans un premier temps j’ai expérimenté le moteur de recherche personnalisé de Google (CSE) qui permet de présenter les résultats indexés par Google pour un site donné (comme avec le préfixe site:).
Si les résultats sont pertinents pour un site contenant de nombreuses pages, il ne semble pas possible de personnaliser les résultats en fonction de sections au sein d’une même page, ce qui ne correspondant pas à mon besoin.
Algolia
Aussi, après plusieurs comparatifs, j’ai finalement retenu la solution Algolia pour les raisons suivantes :
- Pertinence des résultats
- Tarifs abordables (dont un plan gratuit)
- Documentation riche
- Nombreuses bibliothèques de code open source
Étapes clefs
Je souhaitais que le champ de recherche soit disponible sur chacune des pages et qu’il montre immédiatement un extrait des résultats lors de la saisie d’un ou plusieurs mots clefs, et laissant le choix à l’utilisateur de sélectionner la section à consulter : j’ai donc opté pour l’approche Autocomplete (cf. la capture d’écran en début de billet).
Créer un index
Algolia s’appuie sur un index, c’est à dire une collection d’enregistrements dans laquelle la recherche va être effectuée et dont le résultat permet d’afficher un certain nombre d’informations et de pointer vers la page Web correspondante.
Cet index est une structure JSON relativement libre, composée de couples clef-valeur, permettant d’avoir de la matière dans laquelle chercher et également ajuster les critères de recherche.
Transmettre l’index
Algolia propose plusieurs méthodes afin de transmettre ou de mettre à jour l’index :
- à la main, via le dashboard, en uploadant le fichier JSON
- en ligne de command, via Algolia CLI
- programmatiquement, en PHP, en JavaScript, etc.
Paramétrer l’index
Le paramétrage de l’index, c’est à dire déterminer les attributs dans lesquels rechercher, le classement et l’ordonnancement, etc. est relativement simple à réaliser depuis le dashboard.
Je dis relativement car il peut être nécessaire d’effectuer quelques tests avant de maitriser les règles de priorisation des résultats.
Mise en œuvre
Dans le cas de la documentation de Cecil, il faut donc :
- créer un fichier d’index au format JSON
- le transmettre à application Algolia
- afficher un champs de recherche avec auto-complétion
Création de l’index
Avec Cecil il est plutôt aisé de créer un fichier JSON puisque, par définition, c’est son job de générer des fichiers statiques 😊
Ainsi, l’objectif est de :
- collecter le contenu des pages de la documentation (fichiers au format Markdown dans
pages/documentation), converti en HTML - découper ce contenu de manière cohérente (l'objectif n’est pas de pointer sur la page, mais bien sur une section de la page), via un template Twig sur mesure
- générer un fichier
algolia.jsongrâce aux formats de sortie
Résultat cible
Le fichier d’index va ressembler à ça :
[
{
"objectID": "documentation/quick-start#download-cecil",
"page": "Quick Start",
"title": "Download Cecil",
"description": "Download cecil.phar from your terminal:",
"content": "...",
"date": "2020-12-19T00:00:00+00:00",
"href": "documentation/quick-start/#download-cecil"
},
...
]
Création du template
Comme indiqué précédemment, dans le contexte de Cecil, pour créer ce fichier il est nécessaire de créer un template Twig qui va collecter les donner et les rendre au format JSON.
S’agissant de rechercher dans la documentation, j’aurais pu créer ce template dans le dossier « documentation » (layouts/documentation/list.algolia.twig).
Mais comme je souhaite potentiellement étendre la recherche à plusieurs types de contenus (tels que les « news ») je préfère créer un template applicable à l’ensemble des contenus du site, donc une liste par défaut : layouts/_default/list.algolia.twig.
Ainsi, au sein du template, il suffit de boucler sur les contenus de la section « documentation », à l’aide du tag for :
{% for p in site.pages|filter(p => p.section == 'documentation')|sort_by_weight %}
...
{% endfor %}
Ensuite, toute l’astuce consiste à « jouer » sur les header HTML, en l’occurence le « H3 » afin de découper le contenu d’une page en sous sections :
{% set sections = p.content|preg_split('/<h3[^>]*>/') %}
Le filtre Twig
preg_splità été créé pour l’occasion afin de permettre le découpage d’une chaine de caractère en un tableau, selon une expression régulière.
De là, il suffit ensuite d’extraire les contenus cibles de chaque section, via de la manipulation de chaines de caractères, pour alimenter un « dataset » :
{
"objectID": "Un ID unique",
"page": "Le nom de la page de documentation",
"title": "Le titre de section",
"description": "Le premier paragraphe de la section (utilisé pour illustrer l’aperçu des résiltats)",
"content": "Le contenu de la section, dans laquelle la recherche est effectuée",
"date": "La date de la page, utilisée pour pondérer les résultats",
"href": "Le lien vers la page de la documentation, combinée à une ancre afin d’emmener l’internaute à la bonne section",
}
Voir le template complet sur GitHub.
Associer ce template à un format de sortie
En l’état, Cecil ne sait pas qu’il faut utiliser ce template et surtout à quel type de contenu il doit être associé. C’est embêtant 😅
Pour régler ce soucis il suffit de compléter la configuration de la manière suivante :
output:
formats:
- name: algolia
mediatype: 'application/json'
filename: 'algolia'
extension: 'json'
pagetypeformats:
homepage: ['html', 'atom', 'algolia']
Maintenant Cecil sait que :
- Les pages dont la variable
formata pour valeur le nom du format « algolia » peuvent utiliser un template de la forme<layout>.algolia.twig - Enregistrer le fichier généré sous
filename.extension, soit « algolia.json » - La page de type
homepage(listant toutes les pages du site) doit être générée dans le format « algolia » (en plus de « html » et « atom »)
Et voilà, l’index est maintenant généré et disponible à la racine du site généré : https://cecil.app/algolia.json.
Transmission de l’index
Comme indiqué précédemment, Algolia offre plusieurs méthodes d’envoi de l’index.
Dans un premier temps j’ai déposé manuellement le fichier généré localement directement depuis le dashboard : c’est un moyen simple et rapide de faire des tests d’intégrité de l’index.
J’ai ensuite cherché à automatisé cette procédure, et j’ai donc opté pour le client d’API JavaScript.
Cecil.app étant hébergé par Netlify, j’ai utilisé un plugin pour me simplifier la mise en oeuvre : Algolia Index Refresh Build Plugin :
[[context.production.plugins]]
package = "netlify-plugin-refresh-algolia"
[context.production.plugins.inputs]
appId = "APP_ID"
indexName = "INDEX"
filePath = "_site/algolia.json"
Formulaire de recherche
La mise en œuvre est relativement simple :
- intégrer un champ de saisi (élément
input) - lui associer la bibliothèque Autocomplete.js
Champ de saisie :
<input type="text" id="search-input" placeholder="{% trans %}Search the Docs [Alt+S]{% endtrans %}" accesskey="s" />
Autocomplete.js :
// client Algolia
var client = algoliasearch('APP_ID', 'API_KEY');
// index dans lequel rechercher
var index = client.initIndex('INDEX');
// fonction de recherche
function newHitsSource(index, params) {
return function doSearch(query, cb) {
index
.search(query, params)
.then(function(res) {
cb(res.hits, res);
})
.catch(function(err) {
console.error(err);
cb([]);
});
};
}
// association de la lib au champ "search-input"
autocomplete('#search-input', { hint: false }, [
{
source: newHitsSource(index, {
// paramètres de mise en valeur des résultats suggérés
hitsPerPage: 4,
attributesToHighlight: ['description', 'page', 'title'],
highlightPreTag: '<strong>',
highlightPostTag: '</strong>',
attributesToSnippet: ['description:25'],
snippetEllipsisText: '…'
}),
// clef d'affichage principale (ici le titre de la section)
displayKey: 'title'
}
]).on('autocomplete:selected', function(event, suggestion, dataset, context) {
// au clic sur une suggestion on envoie l'internaute vers la page#ancre correspondante
window.location.href = '{{ url() }}' + suggestion.href;
});
Voir le template complet sur GitHub.
Et voilà ! 🎉
Notes :
- Il s’agit ici de la version 0 de Autocomplete.js qui reste fonctionnelle mais commence à vieillir
- La personnalisation de l’apparence des suggestions est un peu pénible car il faut arriver à « retrouver » les classes CSS générées à la volée via JavaScript, ce qui n’est pas toujours évident…
Conclusion
Je me suis bien amusé à créer ce moteur de recherche, et je suis plutôt satisfait de la fonctionnalité, qui est fonctionnelle et surtout très utile.
Pour tester, ça se passe par ici : https://cecil.app/documentation/