Aperçu
Dans Fess 15.9, l’écran de recherche est toujours un thème statique. Un thème statique est une SPA (Single Page Application, application monopage) indépendante qui utilise l’API /api/v2/*. Les thèmes sont distribués sous forme de fichiers ZIP, téléversés puis activés depuis l’écran d’administration. Lorsqu’aucun thème n’est sélectionné, Fess utilise bootstrap, le thème statique fourni avec lui.
Pour modifier l’apparence de l’écran de recherche, installez un autre thème (voir Thème) ou créez le vôtre : le plus rapide est de copier le thème fourni et de modifier la copie, comme décrit dans Personnalisation du thème fourni.
Note
Les thèmes statiques sont disponibles à partir de Fess 15.7 et sont devenus l’écran de recherche par défaut en 15.9. Les plugins de thème JAR, qui remplaçaient les JSP de l’écran de recherche, ont été supprimés en 15.9 ; voir Plugin de thème JAR (supprimé en 15.9).
Thème statique
Un thème statique est un ensemble de ressources statiques comprenant le manifeste theme.yml et index.html. Le thème lui-même est implémenté comme une application front-end qui appelle l’API /api/v2/* de Fess.
Structure
Un thème statique adopte la structure de répertoires suivante.
Manifeste (theme.yml)
theme.yml est le manifeste obligatoire à placer à la racine du ZIP. Voici un exemple de configuration minimale.
Les champs pouvant être spécifiés sont les suivants.
| Champ | Obligatoire | Description |
|---|---|---|
apiVersion | Obligatoire | Valeur fixe fess.codelibs.org/v1. |
kind | Obligatoire | Valeur fixe StaticTheme. |
name | Obligatoire | Nom du thème. Doit correspondre à |
displayName | Obligatoire | Nom affiché dans l’écran d’administration. |
version | Obligatoire | Format de gestion sémantique des versions (exemple : |
author | Facultatif | Nom de l’auteur. |
description | Facultatif | Description du thème. |
license | Facultatif | Licence. |
homepage | Facultatif | URL de la page d’accueil. |
minFessVersion | Facultatif | Version minimale de Fess prise en charge par le thème. Gardez-la égale au |
supportedLocales | Facultatif | Liste des locales prises en charge (exemple : [en, ja, de]). |
entry | Facultatif | HTML d’entrée de la SPA. Valeur par défaut : index.html. |
spaFallback | Facultatif | Obsolète. Accepté pour des raisons de compatibilité mais n’est plus lu : depuis la version 15.9, le HTML d’entrée est toujours servi pour les chemins de l’écran de recherche. |
Note
Lors d’un téléversement depuis un ZIP, le nom du répertoire de destination est déterminé automatiquement à partir de name. Si vous placez manuellement un thème dans le répertoire themes/, veillez à faire correspondre le nom du répertoire avec name. Les thèmes dont le nom ne correspond pas sont ignorés lors de la nouvelle analyse.
Note
La miniature d’aperçu doit être placée à la racine du thème sous le nom fixe thumbnail.png (elle est affichée dans la liste des thèmes de l’écran d’administration). Cette image n’est pas un champ du manifeste ; elle est reconnue par son nom de fichier. Une taille inférieure à 512 Ko et à 512 × 512 pixels est recommandée.
Diffusion et API
Un thème statique est diffusé sous
/themes/<name>/(<name>correspond aunamedéfini danstheme.yml).Le HTML d’entrée (par défaut
index.html) est renvoyé pour chacun des chemins/,/search,/advance,/help,/error,/profile,/cacheet/chat, et le routage ultérieur est assuré par la SPA. Depuis la version 15.9, c’est le cas quelle que soit la valeur despaFallback; ce champ n’est plus lu.Les erreurs sont également rendues par le thème : lorsqu’une requête échoue, le navigateur reçoit le HTML d’entrée du thème à l’URL demandée, avec le véritable statut HTTP.
L’écran d’administration (
/admin/*),/api/*, l’écran de connexion, etc. ne sont pas concernés par le thème statique et sont traités par le cœur de Fess.{{themePath}}dans le HTML d’entrée est remplacé parthemes/<name>lorsque la page est servie. Faites référence aux fichiers du thème depuisindex.htmlsous la forme{{themePath}}/assets/styles.css, etc. Le nom du thème n’apparaît alors pas dans la page, et le thème charge ses propres fichiers quel que soit le nom sous lequel il est installé.Le HTML d’entrée est servi avec un en-tête
Content-Security-Policyqui n’autorise les scripts, les styles, les images et les connexions que depuis Fess lui-même (les styles en ligne sont autorisés ; les scripts en ligne ne le sont pas). Les polices ou scripts provenant d’un CDN externe ne sont donc pas chargés ; incluez-les dans le thème.La
Content-Security-Policydu HTML d’entrée contientframe-ancestors 'none'et la réponse porte aussiX-Frame-Options: DENY; la page n’est donc pas affichée dans un cadre d’une autre page. La valeur deframe-ancestorsse modifie avectheme.index.frame.ancestorsdansfess_config.properties(par défaut :'none'). Une valeur vide retireframe-ancestors(X-Frame-Options: DENYest toujours envoyé). Avecframe-ancestors 'none', les navigateurs basés sur WebKit, comme Safari, laissent vides les cadres qu’un thème affiche depuis une URLblob:(aperçu d’un PDF ou copie en cache). Videz la valeur pour les afficher.La SPA du thème récupère les données telles que les résultats de recherche ou le chat depuis l’API
/api/v2/*.
Empaquetage
Le script scripts/package.sh du dépôt fess-themes permet d’empaqueter le thème dans un fichier ZIP destiné à la distribution.
dist/example-<version>.zip est généré (<version> correspond au version défini dans theme.yml).
Note
theme.yml doit être placé à la racine du ZIP. S’il se trouve dans un sous-répertoire, il ne sera pas reconnu lors du téléversement.
Publication
Les thèmes développés par le projet Fess sont publiés sous https://maven.codelibs.org/release/org/codelibs/fess/themes/ , en <name>/<version>/<name>-<version>.zip avec un .sha1 à côté, et un maven-metadata.xml par thème qui liste les versions publiées. bin/fess-setup install theme <name> lit ces métadonnées pour choisir la version construite pour le Fess en cours d’exécution.
Versionnez un thème sur la ligne Fess qu’il vise et augmentez la version dès que ce que livre l’archive change. Une version publiée n’est jamais écrasée : une modification qui conserve sa version n’est donc tout simplement jamais distribuée.
C’est aussi pourquoi le manifeste n’a pas de champ de borne supérieure. Une archive publiée ne changeant jamais, une borne ne pourrait pas être ajoutée plus tard pour un thème qui cesse de fonctionner sur un Fess plus récent. Ne pas publier ce thème pour la nouvelle ligne dit la même chose, au moment où on le sait.
Note
Énumérez les versions publiées à partir de maven-metadata.xml plutôt que d’un listage de répertoire. L’index de répertoire est généré périodiquement : un thème fraîchement publié est lisible via ses métadonnées avant d’apparaître dans un listage.
Installation et activation
Ouvrez « Système » → « Thème » (
/admin/theme/) dans l’écran d’administration.Téléversez le fichier ZIP créé. Un thème publié peut aussi être installé depuis la ligne de commande avec
bin/fess-setup install theme <name>; voir Commande fess-setup.Sur la page de liste, sélectionnez le thème souhaité dans le menu déroulant « Thème par défaut », puis cliquez sur le bouton « Définir » pour l’activer.
Le mécanisme d’activation est le suivant.
Lorsque vous cliquez sur le bouton « Définir », le nom du thème sélectionné est enregistré dans la propriété système
theme.defaultet devient le thème par défaut pour l’ensemble du système.Si le nom du thème correspond à la clé d’un hôte virtuel, le thème n’est appliqué que lors de l’accès à cet hôte virtuel. Cela permet de changer de thème pour chaque hôte virtuel.
Si vous mettez à jour directement le répertoire
themes/sur le disque, vous pouvez relancer une analyse avec « Recharger ».
Note
Le téléversement du ZIP est soumis à des limites telles que la taille du fichier, la taille totale après décompression et le nombre d’entrées ; ces limites peuvent être ajustées via les propriétés theme.* de fess_config.properties (par exemple, theme.upload.max.size vaut 50 Mo par défaut et theme.directory.path vaut themes par défaut). Lors de la décompression, des vérifications sont effectuées pour empêcher les attaques de type ZIP Slip et zip bomb.
Personnalisation du thème fourni
Le thème fourni bootstrap se trouve dans app/themes/bootstrap/ de l’installation de Fess (/usr/share/fess/app/themes/bootstrap/ pour les paquets RPM/DEB). Ne le modifiez pas sur place : une mise à niveau le remplace, et le nom bootstrap lui est réservé, de sorte qu’il ne peut être ni supprimé ni remplacé par un téléversement. Copiez-le plutôt sous un nouveau nom.
Copiez le répertoire, par exemple vers
mytheme:Dans
theme.yml, remplaceznameparmythemeet modifiezdisplayName.namedoit correspondre au nom du répertoire.Laissez
index.htmltel quel. Leindex.htmlfourni fait référence à ses propres fichiers, comme la feuille de style, les logos et le script, sous la forme{{themePath}}/assets/..., et Fess remplace{{themePath}}parthemes/<name>(lenamedetheme.yml) lorsqu’il sert la page. Il suffit donc de renommer la copie pour qu’elle charge ses propres fichiers. Si vous ajoutez un fichier auquelindex.htmlfait référence, écrivez aussi son URL sous la forme{{themePath}}/assets/....Apportez vos modifications :
Couleurs et mise en page :
assets/styles.css.Logos :
assets/logo-head.png(en-tête) etassets/logo.png(page d’accueil de la recherche).Textes, comme le pied de page (
footer.copyright_org) : les fichiersi18n/messages.<locale>.json, un par langue.Structure de la page :
index.html.
Empaquetez le répertoire dans un ZIP avec
theme.ymlà sa racine, puis téléversez-le depuis « Système » → « Thème » dans l’écran d’administration :Vous pouvez aussi placer le répertoire dans
app/themes/et cliquer sur « Recharger » sur la même page.Sélectionnez
mythemecomme thème par défaut sur cette page.
Note
Après chaque mise à niveau de Fess, remplacez la copie par une nouvelle copie du thème fourni et réappliquez vos modifications, car le thème fourni suit l’API /api/v2/* de sa version de Fess.
Plugin de thème JAR (supprimé en 15.9)
Le type de plugin de thème JAR, qui regroupait des JSP, du CSS et des images dans un JAR fess-theme-* et les appliquait comme le thème portant le même nom que la clé de l’hôte virtuel, a été supprimé dans Fess 15.9. 15.9 ne déploie plus les thèmes JAR et ne les utilise pour aucun écran.
Si vous en installez un depuis « Système » → « Plugin » dans l’écran d’administration, il est seulement placé dans
app/WEB-INF/plugin/comme un JAR générique de typejaret ne modifie aucun écran. Unfess-theme-*.jarlaissé par une version antérieure s’affiche de la même manière et peut être supprimé depuis cet écran ou avecbin/fess-setup remove plugin <name>.bin/fess-setupn’affiche pasfess-theme-*dans ses listes et ne l’installe pas.
Reportez dans un thème statique les modifications que vous faisiez avec un thème JAR.
Pour les couleurs, la mise en page et le logo de l’écran de recherche, copiez le thème fourni et modifiez-le (voir Personnalisation du thème fourni).
Si vous changiez l’apparence par hôte virtuel, installez un thème statique portant le même nom que l’hôte virtuel (voir Hôtes virtuels).
L’écran de connexion (
/login/) est le même pour tous les hôtes virtuels et ne peut pas être modifié par un thème.
Exemples de thèmes existants
fess-themes - Collection de thèmes statiques (regroupe plusieurs thèmes statiques tels que
codesearchetdocsearch)
Informations complémentaires
Architecture des plugins - Architecture des plugins
Plugins - Installation des plugins