---
date: 2020-04-14T16:54:07+02:00
description: "Comment mettre en place le format de description Opensearch dans Hugo !"
draft: false
tags: ["Hugo", "Opensearch", "search"]
title: "Hugo : Opensearch"
translationKey: "hugo-opensearch"
---
## Description
**Opensearch** est un format de description qui permet à un site de décrire
un moteur de recherche pour lui-même, afin que toute application cliente,
tel un navigateur web, puisse faire une recherche dans le site en question.
La plupart des navigateurs vous proposeront l'ajout de votre site en tant
que moteur de recherche si vous gérez l'{{< anchor autopublication autopublication >}}.
**Hugo**, par défaut, ne génére pas de descriptif Opensearch. Nous allons
devoir modifier la {{< anchor configuration configuration >}} pour créer
un nouveau format de sortie personnalisé.
## Documentation
Un petit tour sur la documentation officielle Hugo :
* {{< gohugo n="output-formats" s="templates" >}}
Ainsi que sur la documentation officielle d'Opensearch :
* https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md
## Configuration
* Le fichier de configuration principal : `config.toml`
Il est nécessaire de modifier le fichier de configuration pour :
- créer un nouveau {{< anchor "type de média" "mediatype" >}}
- créer un nouveau {{< anchor "format de sortie" "ouputformat" >}}
- créer le {{< anchor modèle "template" >}} pour le fichier Opensearch.
### MediaType
Le type mime lié au format de description d'Opensearch est : `application/opensearchdescription+xml`.
#### Hugo >= 0.20
Depuis Hugo 0.20, il faut ajouter :
```toml
[mediaTypes]
[mediaTypes."application/opensearchdescription+xml"]
suffix = "xml"
```
Là, nous avons donc implémenté un nouveau type de format ayant pour mime type : `application/opensearchdescription+xml`, et pour nom d'extension : `xml`.
#### Hugo >= 0.44
Depuis Hugo 0.44, pour que cela fonctionne correctement il faut ajouter :
```toml
[mediaTypes]
[mediaTypes."application/opensearchdescription+xml"]
suffixes = ["xml"]
```
{{< note tip >}}Si votre ancienne configuration précédait la 0.44, il faut adapter/transformer la variable `suffix` en `suffixes = ['xml']` ! {{< /note >}}
### OuputFormat
La déclaration du format de sortie, à ajouter :
```toml
[outputs]
[outputFormats.OpenSearch]
baseName = "opensearch"
isHTML = false
isPlainText = false
mediaType = "application/opensearchdescription+xml"
noUgly = true
```
Puis, il faut ajouter `"OpenSearch"` à votre variable `home`, tel que :
```toml
[outputs]
home = ["HTML", "OpenSearch"]
```
### Template
Le modèle peut simplement être créé dans le répertoire `layouts/_default/index.opensearch.xml`.
* Si le site est multilangue, les liens alternatifs vers la version de
langue correspondante à l'entrée du site sont générés.
----
{{}}ATTENTION : le modèle présenté gère un site multilingue.
Tenez-en compte, en supprimant les déclarations de langue, si ce n'est
pas votre cas.
{{}}
```xml
{{ printf `` | safeHTML }}
© {{ $.Date.Format "2006" | safeHTML }} {{ site.Author.name }}; http://creativecommons.org/publicdomain/zero/1.0/legalcode.{{ site.Language.Lang }}
{{ site.Author.email | safeHTML }}
{{ i18n "opensearchDescription" }}
{{ site.Author.name | safeHTML }}
utf-8
{{ site.BaseURL }}img/Logo-64px.png
{{ site.BaseURL }}img/favicon.ico
{{ site.LanguageCode }}
{{ site.Title }} :: {{ site.Language.Lang }}
UTF-8
Websearch
open
{{ site.BaseURL }}{{ site.Language.Lang }}/tags/{searchTerms}/
```
## autopublication
L'autopublication est la méthode qui permet d'informer les clients web du
format de description Opensearch.
{{< note warning >}}Veillez à ce que la valeur de l'attribut `title` corresponde à celle de
l'élément `ShortName` !{{}}
### Atom
Si vous avez modifié votre configuration de Hugo pour générer un flux {{< inside2 a="atom" l="web:hugo:hugo-feed" t="Atom" >}}
il vous faudra le modifier pour ajouter ce qui suit :
```html
```
### HTML
Ajouter un élément `link`, tel que :
```html
```
### RSS
Si vous générez votre flux {{< inside2 a="rss" l="web:hugo:hugo-feed" t="RSS" >}}, veillez à le modifier pour ajouter :
* la déclaration de l'attribut `xmlns:atom="http://www.w3.org/2005/Atom"`
dans votre élément `rss`, tel que :
```html
```
* afin de pouvoir déclarer un élément `atom:link`, tel que :
```html
```
----
## Remerciements
Encore un merci sincère @[solene](https://dataswamp.org/~solene/) qui m'a fait connaître Opensearch.
----