## Для создания вот такой таблицы, вам нужны установить плагин Dataview, а также включить в заметке YAML >[!quote] Как выглядит простая таблица, которая берет информацию из YAML: ![[Pasted image 20250526140904.png]] Код для вставки: ``` ```dataviewjs const pages = dv.pages('"2. Areas/Занятие спортом/Динамика веса"') .where(p => p.Вес && p.date) .sort(p => p.date); let rows = []; let prevWeight = null; const goal = 80; for (let p of pages) { const date = new Date(p.date).toLocaleDateString(); const weight = p.Вес; let diffDisplay = "–"; let toGoal = `${(goal - weight).toFixed(1)} кг`; if (prevWeight !== null) { const diff = weight - prevWeight; if (diff > 0) { diffDisplay = `🟢 +${diff.toFixed(1)}`; // набор массы = хорошо } else if (diff < 0) { diffDisplay = `🔴 ${diff.toFixed(1)}`; // потеря = плохо } else { diffDisplay = "➖ 0"; } } rows.push([date, weight, diffDisplay, toGoal]); prevWeight = weight; } dv.table(["📅 Дата", "⚖️ Вес (кг)", "📈 Разница", "🎯 До цели (80 кг)"], rows);``` ``` -> const pages = dv.pages('"2. Areas/Занятие спортом/Динамика веса"') — заменить на свой путь, в котором лежат наши заметки с YAML -> Последние три символа апострофа перенести на новую строку --- ### 🧠 Пояснение для тех, кто хочет глубже понимать о чем этот код: Этот код — не просто таблица. Это **умный трекер веса прямо внутри Obsidian**. Он показывает: - дату записи; - текущий вес; - изменение веса по сравнению с предыдущей записью; - сколько ещё осталось до цели (например, 80 кг). И всё это — **автоматически**, без Excel и сторонних приложений. --- #### Чем отличается `dataviewjs` от обычного `dataview`? |Обычный `dataview`|`dataviewjs`| |---|---| |Пишешь как в Excel: просто `таблица`, `сортировка`, `фильтр`.|Используешь JavaScript — значит, можно делать более сложную логику: сравнения, расчёты, эмоции.| |Подходит для простых списков и таблиц.|Подходит для продвинутых трекеров, расчётов, визуализаций.| |Не умеет считать разницу между значениями.|Умеет сравнивать, считать разницу и даже выводить эмоджи в зависимости от результата.| --- #### Объяснение кода шаг за шагом ```js const pages = dv.pages('"2. Areas/Занятие спортом/Динамика веса"') .where(p => p.Вес && p.date) .sort(p => p.date); ``` - Мы берём все заметки из папки **"Динамика веса"**. - Фильтруем: нужны только те, где есть и **вес**, и **дата**. - Сортируем по дате — чтобы было по порядку. --- ```js let rows = []; let prevWeight = null; const goal = 80; ``` - `rows` — сюда будут собираться строки таблицы. - `prevWeight` — запомним предыдущий вес, чтобы сравнить с текущим. - `goal` — твоя цель (например, **80 кг**). Код будет показывать, сколько ещё осталось. --- ```js for (let p of pages) { const date = new Date(p.date).toLocaleDateString(); const weight = p.Вес; ``` - Получаем дату и вес из каждой заметки. - Дату делаем читаемой (например, "27.05.2025"). --- ```js let diffDisplay = "–"; let toGoal = `${(goal - weight).toFixed(1)} кг`; ``` - `diffDisplay` — что произошло с весом с прошлого раза. - `toGoal` — сколько ещё осталось до цели в килограммах. --- ```js if (prevWeight !== null) { const diff = weight - prevWeight; if (diff > 0) { diffDisplay = `🟢 +${diff.toFixed(1)}`; } else if (diff < 0) { diffDisplay = `🔴 ${diff.toFixed(1)}`; } else { diffDisplay = "➖ 0"; } } ``` - Сравниваем вес: стал больше, меньше или остался прежним. - Добавляем цвет и эмоджи: - 🟢 набрал вес — хорошо! - 🔴 потерял — может, надо поесть 😅 - ➖ остался — стабильность! --- ```js rows.push([date, weight, diffDisplay, toGoal]); prevWeight = weight; ``` - Добавляем всё в таблицу. - Запоминаем текущий вес, чтобы сравнивать с следующим. --- ```js dv.table(["📅 Дата", "⚖️ Вес (кг)", "📈 Разница", "🎯 До цели (80 кг)"], rows); ``` - Выводим красивую таблицу: - дата, - вес, - изменение, - сколько осталось до цели. --- ## 💥 Результат Ты получаешь таблицу прямо в Obsidian, которая: - считает прогресс; - показывает, где ты теряешь или набираешь; - мотивирует продолжать. Это идеальный инструмент для **саморазвития и отслеживания прогресса**. И ты сам это сделал — без Excel, без приложений, только на базе Obsidian.