Barre latérale
La création d'une barre latérale est utile pour :
- Grouper plusieurs documents connexes
- Afficher une barre latérale sur chacun de ces documents
- Fournir une navigation paginée, avec le bouton suivant/précédent
Pour utiliser les barres latérales sur votre site Docusaurus :
- Spécifiez un fichier exportant un objet de barre latérale.
- Passez cet objet directement dans le plugin
@docusaurus/plugin-docs
ou via@docusaurus/preset-classic
.
module.exports = { presets: [ [ '@docusaurus/preset-classic', { docs: { sidebarPath: require.resolve('./sidebars.js'), }, }, ], ],};
#
Barre latérale par défautPar défaut, Docusaurus génère automatiquement une barre latérale pour vous, en utilisant la structure du système de fichiers du dossier docs
:
module.exports = { mySidebar: [ { type: 'autogenerated', dirName: '.', génère une barre latérale à partir du dossier docs (ou versioned_docs/<version>) }, ],};
Vous pouvez également définir vos barres latérales de manière explicite.
#
Objet sidebarUne barre latérale est un arbre d'éléments de la barre latérale.
type Sidebar = // Syntaxe normale | SidebarItem[]
// Syntaxe abrégée | Record< string, // libellé de la catégorie SidebarItem[] // éléments de la catégorie >;
Un fichier de barres latérales peut contenir des objets de barre latérale multiples.
type SidebarsFile = Record< string, // sidebar id Sidebar>;
Exemple :
module.exports = { mySidebar: [ { type: 'category', label: 'Pour commencer', items: ['doc1'], }, { type: 'category', label: 'Docusaurus', items: ['doc2', 'doc3'], }, ],};
Remarquez les éléments suivants :
- Il y a une seule barre latérale
mySidebar
, contenant 5 éléments de la barre latérale Pour commencer
etDocusaurus
sont des catégories de la barre latéraledoc1
,doc2
etdoc3
sont des documents de barre latérale
astuce
Utilisez la syntaxe abrégée pour exprimer cette barre latérale de manière plus concise :
module.exports = { mySidebar: { 'Pour commencer': ['doc1'], Docusaurus: ['doc2', 'doc3'], },};
#
Utiliser plusieurs barres latéralesVous pouvez créer une barre latérale pour chaque ensemble de fichiers Markdown que vous souhaitez regrouper.
Exemple :
module.exports = { tutorialSidebar: { 'Category A': ['doc1', 'doc2'], }, apiSidebar: ['doc3', 'doc4'],};
remarque
Les clés tutorialSidebar
et apiSidebar
sont identifiants techniques de barre latéralé et n'ont pas beaucoup d'importance.
Lors de la navigation :
doc1
oudoc2
: latutorialSidebar
sera affichéedoc3
oudoc4
: laapiSidebar
sera affichée
Un lien de navigation paginé pour les documents dans la même barre latérale avec les boutons suivant et précédent.
#
Comprendre les éléments de la barre latéraleSidebarItem
est un élément défini dans un arbre de barre latérale.
Il y a différents types pour les éléments de la barre latérale :
- Doc : lien vers une page de doc, permettant de la placer dans la barre latérale
- Ref : lien vers une page de doc, sans la placer dans la barre latérale
- Link : lien vers une page interne ou externe
- Category : créer une hiérarchie des éléments de la barre latérale
- Autogenerated : génère automatiquement une barre latérale
#
Doc : lien vers un docUtilisez le type doc
pour créer un lien vers une page doc et ajouter ce doc à une barre latérale :
type SidebarItemDoc = // Syntaxe normale | { type: 'doc'; id : string; label: string; // Texte libellé de la barre latérale }
// Syntaxe abrégée | string ; // raccourci docId
Exemple :
module.exports = { mySidebar: [ // Syntaxe normale : { type: 'doc', id: 'doc1', // id du document label: 'Pour commencer', // libellé de la barre latérale },
// Syntaxe abrégée : 'doc2', // id du document ],};
Le sidebar_label
du frontmatter de markdown a une priorité supérieure à la clé label
dans SidebarItemDoc
.
remarque
Ne pas affecter le même doc à plusieurs barres latérales : utilisez plutôt un ref.
#
Ref : lien vers un doc, sans barre latéraleUtilisez le type ref
pour créer un lien vers une page doc sans l'ajouter à une barre latérale.
type SidebarItemRef = { type: 'ref'; id: string;};
Exemple :
module.exports = { mySidebar: [ { type: 'ref', id: 'doc1', // Id du document (string). }, ],};
Lorsque vous parcourez doc1
, Docusaurus n'affichera pas la barre latérale mySidebar
.
#
Link : lien vers n'importe quelle pageUtilisez le type link
pour créer un lien vers une page (interne ou externe) qui n'est pas un doc.
type SidebarItemLink = { type: 'link'; label: string; href: string;};
Exemple :
module.exports = { myLinksSidebar: [ // Lien externe { type: 'link', label: 'Facebook', // Le libellé du lien href: 'https://facebook.com', // L'URL externe },
// Lien interne { type: 'link', label: 'Accueil', // Le libellé du lien href: '/', // Le chemin interne }, ],};
#
Category : créer une hiérarchieUtilisez le type category
pour créer une hiérarchie des éléments de la barre latérale.
type SidebarItemCategory = { type: 'category'; label: string; // Texte du libellé de la barre latérale. items: SidebarItem[]; // Tableau d'éléments de la barre latérale.
// Options de catégorie : collapsible: boolean; // Configure la catégorie pour qu'elle soit repliable collapsed: boolean; // Définit la catégorie à être initialement réduite ou ouverte par défaut};
Exemple :
module.exports = { docs: [ { type: 'category', label: 'Guides', collapsible: true, collapsed: false, items: [ 'creating-pages', { type: 'category', label: 'Docs', items: ['introduction', 'sidebar', 'markdown-features', 'versioning'], }, ], }, ],};
astuce
Utilisez la syntaxe abrégée ** lorsque vous n'avez pas besoin d'options de catégorie** :
module.exports = { docs: { Guides: [ 'creating-pages', { Docs: ['introduction', 'sidebar', 'markdown-features', 'versioning'], }, ], },};
#
Catégories repliablesWe support the option to expand/collapse categories. Categories are collapsible by default, but you can disable collapsing with collapsible: false
.
module.exports = { docs: [ { type: 'category', label: 'Guides', items: [ 'creating-pages', { type: 'category', collapsible: false, label: 'Docs', items: ['introduction', 'sidebar', 'markdown-features', 'versioning'], }, ], }, ],};
To make all categories non-collapsible by default, set the sidebarCollapsible
option in plugin-docs
to false
:
module.exports = { presets: [ [ '@docusaurus/preset-classic', { docs: { sidebarCollapsible: false, }, }, ], ],};
remarque
The option in sidebars.js
takes precedence over plugin configuration, so it is possible to make certain categories collapsible when sidebarCollapsible
is set to false
globally.
#
Catégories développées par défautCollapsible categories are collapsed by default. If you want them to be expanded on first render, you can set collapsed
to false
:
module.exports = { docs: { Guides: [ 'creating-pages', { type: 'category', label: 'Docs', collapsed: false, items: ['markdown-features', 'sidebar', 'versioning'], }, ], },};
Similar to collapsible
, you can also set the global configuration options.sidebarCollapsed
to false
. Individual collapsed
options in sidebars.js
will still take precedence over this configuration.
module.exports = { presets: [ [ '@docusaurus/preset-classic', { docs: { sidebarCollapsed: false, }, }, ], ],};
caution
When a category has collapsed: true
but collapsible: false
(either through sidebars.js
or through plugin configuration), the latter takes precedence and the category is still rendered as expanded.
#
Autogenerated : générer une barre latéraleDocusaurus peut créer une barre latérale automatiquement à partir de votre structure de système de fichiers : chaque dossier crée une catégorie de barre latérale.
Un élément autogenerated
est converti par Docusaurus en une barre latérale : une liste d'éléments de type doc
et category
.
type SidebarItemAutogenerated = { type: 'autogenerated'; dirName: string; // Dossier source pour générer la barre latérale (relative à docs)};
Docusaurus peut générer une barre latérale à partir de votre dossier docs :
module.exports = { myAutogeneratedSidebar: [ { type: 'autogenerated', dirName: '.', // '.' signifie le dossier docs courant }, ],};
Vous pouvez également utiliser plusieurs autogenerated
dans une barre latérale, et les laisser avec les éléments de la barre latérale habituelle :
module.exports = { mySidebar: [ 'intro', { type: 'category', label: 'Tutorials', items: [ 'tutorial-intro', { type: 'autogenerated', dirName: 'tutorials/easy', // Génère une barre latérale à partir de docs/tutorials/easy }, 'tutorial-medium', { type: 'autogenerated', dirName: 'tutorials/advanced', // Génère une barre latérale à partir de docs/tutorials/hard }, 'tutorial-end', ], }, { type: 'autogenerated', dirName: 'guides', // Génère une barre latérale à partir de docs/guides }, { type: 'category', label: 'Community', items: ['team', 'chat'], }, ],};
#
Métadonnées de la barre latérale générées automatiquementPar défaut, la barre latérale sera générée par ordre alphabétique (en utilisant les noms des fichiers et des dossiers).
Si la barre latérale générée ne semble pas correcte, vous pouvez assigner des métadonnées supplémentaires à des docs et des catégories.
Pour les docs : utilisez un frontmatter supplémentaire :
---sidebar_label: Easysidebar_position: 2---
# Tutoriel facile
C'est le tutoriel facile !
Pour les catégories : ajoutez un fichier _category_.json
ou _category_.yml
dans le dossier approprié :
{ "label": "Tutoriel", "position": 3}
label: 'Tutorial'position: 2.5 # la position flottante est prise en chargecollapsible: true # rend la catégorie repliablecollapsed: false # garde la catégorie ouverte par défaut
info
Les métadonnées de position ne sont utilisées que à l'intérieur d'une barre latérale : Docusaurus ne réorganise pas les autres éléments de votre barre latérale.
#
Utilisez les préfixes de nombreUn moyen simple de trier une barre latérale générée automatiquement est de préfixer les docs et les dossiers par des préfixes de nombre :
docs├── 01-Intro.md├── 02-Tutorial Easy│ ├── 01-First Part.md│ ├── 02-Second Part.md│ └── 03-End.md├── 03-Tutorial Hard│ ├── 01-First Part.md│ ├── 02-Second Part.md│ ├── 03-Third Part.md│ └── 04-End.md└── 04-End.md
Pour faciliter son adoption, Docusaurus prend en charge plusieurs formats de préfixes numériques.
Par défaut, Docusaurus supprimera le préfixe de nombre de l'identifiant du doc, du titre, du libellé et des chemins de l'URL.
caution
Préférez l'utilisation de métadonnées supplémentaires.
Mettre à jour un préfixe de nombres peut être ennuyeux, car cela peut nécessiter la mise à jour de plusieurs liens markdown existants :
- Check the [Tutorial End](../04-End.md);+ Check the [Tutorial End](../05-End.md);
#
Personnalisez le générateur d'éléments de la barre latéraleVous pouvez fournir une fonction personnalisée sidebarItemsGenerator
dans la configuration du plugin docs (ou du preset) :
module.exports = { plugins: [ [ '@docusaurus/plugin-content-docs', { sidebarItemsGenerator: async function ({ defaultSidebarItemsGenerator, numberPrefixParser, item, version, docs, }) { // Exemple : retourne une liste codée en dur des éléments statiques de la barre latérale return [ {type: 'doc', id: 'doc1'}, {type: 'doc', id: 'doc2'}, ]; }, }, ], ],};
astuce
Réutilisez et améliorez le générateur par défaut au lieu d'écrire un générateur à partir de zéro.
Ajoutez, mettez à jour, filtrez, réordonnez les éléments de la barre latérale en fonction de votre cas d'utilisation :
// Inverse l'ordre des éléments de la barre latérale (y compris les éléments de catégorie imbriqués)function reverseSidebarItems(items) { // Inverse les éléments dans les catégories const result = items.map((item) => { if (item.type === 'category') { return {...item, items: reverseSidebarItems(item.items)}; } return item; }); // Inverse les éléments au niveau actuel result.reverse(); return result;}
module.exports = { plugins: [ [ '@docusaurus/plugin-content-docs', { sidebarItemsGenerator: async function ({ defaultSidebarItemsGenerator, ...args }) { const sidebarItems = await defaultSidebarItemsGenerator(args); return reverseSidebarItems(sidebarItems); }, }, ], ],};
#
Barre latérale masquableGrâce à l'option activée themeConfig.hideableSidebar
, vous pouvez masquer l'intégralité de la barre latérale, ce qui vous permet de mieux concentrer vos utilisateurs sur le contenu. Ceci est particulièrement utile lors de la consommation de contenu sur des écrans à dimensions moyennes (par exemple, sur des tablettes).
module.exports = { themeConfig: { hideableSidebar: true, },};
#
Passage de props personnalisésPour transmettre des props personnalisés à un élément « swizzlé » de la barre latérale, ajoutez l'objet optionnel customProps
à l'un des éléments :
{ type: 'doc', id: 'doc1', customProps: { /* props */ }}
#
Exemple de barres latérales complexesExemple du monde réel du site Docusaurus :
module.exports = { docs: [ 'introduction', { type: 'category', label: 'Getting Started', collapsed: false, items: [ 'installation', 'configuration', 'playground', 'typescript-support', ], }, { type: 'category', label: 'Guides', items: [ 'guides/creating-pages', { Docs: [ 'guides/docs/introduction', 'guides/docs/create-doc', 'guides/docs/sidebar', 'guides/docs/versioning', 'guides/docs/markdown-features', 'guides/docs/multi-instance', ], }, 'blog', { type: 'category', label: 'Markdown Features', items: [ 'guides/markdown-features/introduction', 'guides/markdown-features/react', 'guides/markdown-features/tabs', 'guides/markdown-features/code-blocks', 'guides/markdown-features/admonitions', 'guides/markdown-features/headings', 'guides/markdown-features/inline-toc', 'guides/markdown-features/assets', 'guides/markdown-features/plugins', 'guides/markdown-features/math-equations', 'guides/markdown-features/head-metadatas', ], }, 'styling-layout', 'static-assets', 'search', 'browser-support', 'deployment', { type: 'category', label: 'Internationalization', items: [ { type: 'doc', id: 'i18n/introduction', label: 'Introduction', }, { type: 'doc', id: 'i18n/tutorial', label: 'Tutorial', }, { type: 'doc', id: 'i18n/git', label: 'Using Git', }, { type: 'doc', id: 'i18n/crowdin', label: 'Using Crowdin', }, ], }, ], }, { type: 'category', label: 'Advanced Guides', items: ['using-plugins', 'using-themes', 'presets'], }, { type: 'category', label: 'Migrating from v1 to v2', items: [ 'migration/migration-overview', 'migration/migration-automated', 'migration/migration-manual', 'migration/migration-versioned-sites', 'migration/migration-translated-sites', ], }, ], api: [ 'cli', 'docusaurus-core', 'api/docusaurus.config.js', 'lifecycle-apis', { type: 'category', label: 'Plugins', items: [ 'api/plugins/plugins-overview', 'api/plugins/plugin-content-docs', 'api/plugins/plugin-content-blog', 'api/plugins/plugin-content-pages', 'api/plugins/plugin-client-redirects', 'api/plugins/plugin-debug', 'api/plugins/plugin-google-analytics', 'api/plugins/plugin-google-gtag', 'api/plugins/plugin-ideal-image', 'api/plugins/plugin-pwa', 'api/plugins/plugin-sitemap', ], }, { type: 'category', label: 'Themes', items: [ 'api/themes/themes-overview', 'api/themes/theme-configuration', 'api/themes/theme-classic', 'api/themes/theme-bootstrap', 'api/themes/theme-live-codeblock', 'api/themes/theme-search-algolia', ], }, ],};