nodebb-plugin-faq
v1.0.7
Published
Adds a customizable FAQ page (with an admin manager) to your NodeBB forum
Readme
nodebb-plugin-faq
Un plugin FAQ complet pour NodeBB 4.x : une page publique /faq et une page
d'administration pour créer, éditer, activer/désactiver, réordonner et
supprimer les questions/réponses, avec support de catégories optionnelles.
Fonctionnalités
- Page publique
/faqen accordéon (question cliquable qui déplie la réponse) - Regroupement automatique par catégorie si vous en définissez plusieurs
- Page ACP (
Admin > Extensions > FAQou directement/admin/plugins/faq) :- Ajout / édition / suppression des entrées
- Réorganisation par glisser-déposer (si jQuery UI Sortable est chargé par le thème)
- Activer/désactiver une entrée sans la supprimer
- Titre et texte d'introduction de la page personnalisables
- Stockage via l'API
databasenative de NodeBB (compatible Redis, MongoDB, PostgreSQL) - i18n : anglais (
en-GB) et français (fr) fournis, facile à étendre - Aucune dépendance externe
Installation
Copiez le dossier
nodebb-plugin-faqà la racine de votre installation NodeBB, à côté du dossiernode_modules, ou publiez-le sur npm et installez-le normalement :cd /chemin/vers/votre/nodebb npm install /chemin/vers/nodebb-plugin-faqSi vous préférez un lien symbolique en développement :
cd nodebb-plugin-faq npm link cd /chemin/vers/votre/nodebb npm link nodebb-plugin-faqReconstruisez les assets et redémarrez NodeBB :
./nodebb build ./nodebb restartDans l'ACP (
Admin > Extensions), activez FAQ Plugin, puis relancez NodeBB si demandé.Rendez-vous sur
Admin > Plugins > FAQ(menu latéral gauche de l'ACP) pour ajouter vos premières questions/réponses, puis visitez/faqsur votre forum.
Ajouter un lien de navigation
Le plugin n'ajoute pas automatiquement de lien dans le menu principal du forum (pour rester non-intrusif). Pour en ajouter un :
Admin > Settings > Navigation- Cliquez sur "Add Custom Route"
- Route :
/faq, Title :FAQ, choisissez une icône (fa-question-circlepar exemple), puis enregistrez.
Structure du plugin
nodebb-plugin-faq/
├── plugin.json # Manifest NodeBB (hooks, assets, templates, langues)
├── package.json
├── library.js # Init, routes, hooks, sockets admin
├── controllers.js # Contrôleurs des pages publique et ACP
├── faq.js # Couche d'accès aux données (CRUD)
├── languages/
│ ├── en-GB/faq.json
│ └── fr/faq.json
├── static/
│ ├── lib/admin.js # Script ACP (gestion des entrées)
│ ├── lib/faq-client.js # Script public (accordéon)
│ └── scss/faq.scss # Styles
└── templates/
├── faq.tpl # Page publique
└── admin/plugins/faq.tpl # Page ACPModèle de données
Chaque entrée FAQ est stockée comme un objet :
{
"id": 1,
"question": "Comment réinitialiser mon mot de passe ?",
"answer": "Cliquez sur « Mot de passe oublié » sur la page de connexion.",
"category": "Compte",
"enabled": true
}faq:items: sorted set NodeBB contenant les IDs, ordonnés par position d'affichagefaq:item:<id>: hash contenant les données de l'entréefaq:global: compteur (nextId) pour générer les identifiants
API socket (admin uniquement)
Toutes les méthodes vérifient que l'utilisateur est administrateur.
| Événement | Payload | Description |
|---------------------------|---------------------------------|----------------------------------|
| plugins.faq.list | – | Liste toutes les entrées |
| plugins.faq.create | {question, answer, category, enabled} | Crée une entrée |
| plugins.faq.update | {id, question, answer, category, enabled} | Met à jour une entrée|
| plugins.faq.delete | {id} | Supprime une entrée |
| plugins.faq.reorder | {ids: [id, id, ...]} | Réordonne les entrées |
Personnalisation
- HTML dans les réponses : le champ
answerest injecté tel quel dans le template ({faqs.answer}sans échappement), vous pouvez donc utiliser du HTML basique (liens, gras, listes). Attention : n'autorisez la saisie qu'aux administrateurs de confiance, car ce contenu n'est pas assaini (pas de sanitisation XSS). - Style : modifiez librement
static/scss/faq.scss, il est précompilé au moment du./nodebb build. - Catégories : laissez le champ catégorie vide pour un affichage en liste simple ; remplissez-le pour un regroupement automatique par section.
Licence
MIT
