You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
vitepress/docs/ru/reference/default-theme-sidebar.md

214 lines
6.5 KiB

# Сайдбар {#sidebar}
Сайдбар (боковая панель) — основной навигационный блок вашей документации. Меню боковой панели можно настроить в секции [`themeConfig.sidebar`](./default-theme-config#sidebar).
```js
export default {
themeConfig: {
sidebar: [
{
text: 'Руководство',
items: [
{ text: 'Введение', link: '/ru/introduction' },
{ text: 'Первые шаги', link: '/ru/getting-started' },
...
]
}
]
}
}
```
## Основы {#the-basics}
Простейшая форма сайдбара — это передача массива ссылок. Элемент первого уровня определяет «секцию» сайдбара. Он должен содержать `text`, который является заголовком секции, и `items`, которые являются фактическими навигационными ссылками.
```js
export default {
themeConfig: {
sidebar: [
{
text: 'Заголовок секции A',
items: [
{ text: 'Пункт A', link: '/item-a' },
{ text: 'Пункт B', link: '/item-b' },
...
]
},
{
text: 'Заголовок секции B',
items: [
{ text: 'Пункт C', link: '/item-c' },
{ text: 'Пункт D', link: '/item-d' },
...
]
}
]
}
}
```
Каждый элемент `link` должен указывать путь к фактическому файлу, начинающийся с `/`. Если добавить в конец ссылки косую черту, то будет показан `index.md` соответствующего каталога.
```js
export default {
themeConfig: {
sidebar: [
{
text: 'Руководство',
items: [
// Ссылка на страницу `/ru/guide/index.md`
{ text: 'Введение', link: '/ru/guide/' }
]
}
]
}
}
```
Вы можете вложить элементы боковой панели на 6 уровней вглубь, считая от корневого уровня. Обратите внимание, что более 6 уровней вложенных элементов будут игнорироваться и не отображаться на боковой панели.
```js
export default {
themeConfig: {
sidebar: [
{
text: 'Уровень 1',
items: [
{
text: 'Уровень 2',
items: [
{
text: 'Уровень 3',
items: [
...
]
}
]
}
]
}
]
}
}
```
## Несколько сайдбаров {#multiple-sidebars}
Вы можете показывать разные боковые панели в зависимости от текущего маршрута. Например, как показано на этом сайте, вы можете создать в документации отдельные разделы, например, «Руководство» и «Настройка».
Для этого сначала организуйте страницы в каталоги для каждого нужного раздела:
```
.
├─ guide/
│ ├─ index.md
│ ├─ one.md
│ └─ two.md
└─ config/
├─ index.md
├─ three.md
└─ four.md
```
Затем обновите конфигурацию, чтобы определить боковую панель для каждого раздела. На этот раз вместо массива нужно передать объект.
```js
export default {
themeConfig: {
sidebar: {
// Эта боковая панель отображается, когда пользователь находится в директории `guide`
'/guide/': [
{
text: 'Руководство',
items: [
{ text: 'Index', link: '/guide/' },
{ text: 'One', link: '/guide/one' },
{ text: 'Two', link: '/guide/two' }
]
}
],
// Эта боковая панель отображается, когда пользователь находится в директории `config`
'/config/': [
{
text: 'Настройка',
items: [
{ text: 'Index', link: '/config/' },
{ text: 'Three', link: '/config/three' },
{ text: 'Four', link: '/config/four' }
]
}
]
}
}
}
```
## Сворачиваемые группы {#collapsible-sidebar-groups}
Добавив опцию `collapsed` внутри группы `sidebar`, вы увидите кнопку переключения для скрытия/показа каждой секции.
```js
export default {
themeConfig: {
sidebar: [
{
text: 'Заголовок секции A',
collapsed: false,
items: [...]
}
]
}
}
```
Все секции «развёрнуты» по умолчанию. Если вы хотите, чтобы они были «свёрнуты» при первоначальной загрузке страницы, установите для опции `collapsed` значение `true`.
```js
export default {
themeConfig: {
sidebar: [
{
text: 'Заголовок секции A',
collapsed: true,
items: [...]
}
]
}
}
```
## `useSidebar` <Badge type="info" text="композабл" /> {#usesidebar}
Возвращает данные, связанные с сайдбаром. Возвращаемый объект имеет следующий тип:
```ts
export interface DocSidebar {
isOpen: Ref<boolean>
sidebar: ComputedRef<DefaultTheme.SidebarItem[]>
sidebarGroups: ComputedRef<DefaultTheme.SidebarItem[]>
hasSidebar: ComputedRef<boolean>
hasAside: ComputedRef<boolean>
leftAside: ComputedRef<boolean>
isSidebarEnabled: ComputedRef<boolean>
open: () => void
close: () => void
toggle: () => void
}
```
**Пример:**
```vue
<script setup>
import { useSidebar } from 'vitepress/theme'
const { hasSidebar } = useSidebar()
</script>
<template>
<div v-if="hasSidebar">Показывать только при наличии сайдбара</div>
</template>
```