- PVSM.RU - https://www.pvsm.ru -
Поделюсь своим опытом создания цифровой библиотеки книг в Obsidian [1], используя плагины Dataview и Meta Bind. Цель — создать простой каталог книг с фильтрацией по различным параметрам, таким как жанры, авторы и статус прочтения.

Dataview [2] - плагин, с помощью которого можно создавать динамические списки, таблицы и графики на основе ваших заметок, использую SQL-подобные запросы.
Meta Bind [3] - плагин, позволяющий добавлять в заметки интерактивные элементы (например, кнопки и поля для ввода данных).
Кроме того, для преобразования табличного вида списка книг в симпатичные карточки с обложками, понадобится установить тему Minimal Theme [4] или подключить соответствующий css-сниппет [5].
Нам понадобится всего два типа заметок:
Отдельная заметка для каждой книги в нашей библиотеке;
Заметка с общим списком книг и фильтрами.
Для каждой книги придётся создать отдельную заметку, в шапке которой необходимо указать метаданные (YAML), по которым можно будет фильтровать и сортировать нашу библиотеку:
---
aliases: # Альтернативное название книги (например, на другом языке)
- Сто лет одиночества
created: 2023-12-31 # Дата создания заметки
author: "Габриэль Гарсиа Маркес" # Автор книги
genre: fiction # Жанр книги
published: 1967 # Год публикации книги
image: https://m.media-amazon.com/images/I/71wuXP0vTrL._SY522_.jpg # Картинка с обложкой
status: unread # Статус прочтения книги
---
## Записи
Какие-то записи о прочитанной книге.
В YAML-блоке указываем параметры, которые будем использовать при фильтрации таблицы книжных заметок с помощью плагина Mеta Bind по статусу, жанру, дате создания и названию — dvStatus, dvGenre, dvDate, dvName.
Для того, чтобы Dataview таблица со списком книг выводилась в виде карточек с обложками книг, в параметре cssclasses указываем вспомогательные классы cards, cards-cover, cards-2-3 и cards-cols-4.
---
cssclasses:
- cards
- cards-cover
- cards-2-3
- cards-cols-4
dvStatus: unread
dvGenre: ""
dvDate: ""
dvName: ""
---
Создаём блок с полями для фильтрации таблицы со списком книг, используя синтаксис плагина Meta Bind [3]:
`INPUT[inlineSelect(defaultValue(unread), option(unread, Unread), option(read, Read), option('', *)):dvStatus]` `INPUT[inlineSelect(defaultValue(''), option(2023, 2023), option(2024, 2024), option('', *)):dvDate]` `INPUT[inlineSelect(defaultValue(''), option(fantasy, Fantasy), option(science fiction, Science Fiction), option(fiction, Fiction), option(non-fiction, Non-fiction), option('', *)):dvGenre]` `INPUT[text(placeholder(Book Name)):dvName]`
Результат в Reading Mode должен выглядеть так:

Создаём таблицы со списком книг, используя синтаксис плагина Dataview [2]:
```dataview
TABLE WITHOUT ID
("") AS "Cover",
choice(!aliases, link(file.link, file.name), link(file.link, aliases)) AS "Title",
published,
genre,
"by " + author AS "Author"
WHERE contains(file.folder, "Books") AND contains(lower(file.aliases), lower(this.dvName)) AND contains(string(created.year), string(this.dvDate)) AND startswith(genre, this.dvGenre) AND contains(status, this.dvStatus) AND file.name != this.file.name
SORT file.name ASC
```
В строке contains(file.folder, "Books") необходимо заменить Books на название папки, в которой хранятся все книжные заметки.
Результат в Reading Mode должен выглядеть так:

---
cssclasses:
- cards
- cards-cover
- cards-2-3
- cards-cols-4
dvStatus: unread
dvGenre: ""
dvDate: ""
dvName: ""
---
## Список книг
`INPUT[inlineSelect(defaultValue(unread), option(unread, Unread), option(read, Read), option('', *)):dvStatus]` `INPUT[inlineSelect(defaultValue(''), option(2023, 2023), option(2024, 2024), option('', *)):dvDate]` `INPUT[inlineSelect(defaultValue(''), option(fantasy, Fantasy), option(science fiction, Science Fiction), option(fiction, Fiction), option(non-fiction, Non-fiction), option('', *)):dvGenre]` `INPUT[text(placeholder(Book Name)):dvName]`
```dataview
TABLE WITHOUT ID
("") AS "Cover",
choice(!aliases, link(file.link, file.name), link(file.link, aliases)) AS "Title",
published,
genre,
"by " + author AS "Author"
WHERE contains(file.folder, "Books") AND contains(lower(file.aliases), lower(this.dvName)) AND contains(string(created.year), string(this.dvDate)) AND startswith(genre, this.dvGenre) AND contains(status, this.dvStatus) AND file.name != this.file.name
SORT file.name ASC
```
Если вы ищете способ упорядочить свою библиотеку книг, Obsidian - это отличный вариант!
Автор: FatNotBad
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/gtd/406317
Ссылки в тексте:
[1] Obsidian: https://obsidian.md
[2] Dataview: https://github.com/blacksmithgu/obsidian-dataview
[3] Meta Bind: https://github.com/mProjectsCode/obsidian-meta-bind-plugin
[4] Minimal Theme: https://github.com/kepano/obsidian-minimal?tab=readme-ov-file
[5] css-сниппет: https://drive.google.com/file/d/1hwSEs9mjCVri2pfG3YoeA_TEWX5J_NyF/view?usp=share_link
[6] Источник: https://habr.com/ru/articles/870262/?utm_source=habrahabr&utm_medium=rss&utm_campaign=870262
Нажмите здесь для печати.