9 Создание блогов
Блог подразумевает регулярно добавляемые пользователем записи вместе с возможностью обновления. Quarto дает большие возможности для создания блогов на основе веб-страниц, состоящих из коллекции постов, которые можно отображать в различном виде упорядочивать, в свою очередь, блоги могут являться элементами веб-страниц.
Блоги создаются на основе особых типов веб-страниц — списков (или листингов), которые могут рассматриваться и в более широком смысле, например, на основе листингов можно создавать страницы с докладами на конференциях или списки научных публикаций.
9.1 Создание блога на основе шаблона
Опишем несколько способов создания блогов: в Visual Studio Code (или Positron), RStudio и с помощью командной строки.
Для создания блога в Quarto в Visual Studio Code (соответственно, Positron) нужно выбрать меню Палитра команд, далее Quarto : Create Project и выбрать Blog Project.
Чтобы создать блог в Quarto в RStudio, необходимо выбрать в меню File : New Project… : New Directory : Quarto Blog как на рисунке ниже.
Далее можно выбрать название проекта, директорию, движок, а также возможно выбрать возможность создания Git-репозитория, добавить renv для воспроизводимости и использовать визуальный редактор.
Блог можно создать на основе шаблона из командной строки, например, используя команду:
Terminal
quarto create-project myblog --type website:blogЕще один вариант создания блога — использовать команду
Terminal
quarto create project blog myblog
В процессе создания блога на основе любого из способов, перечисленных выше, будет сформирован каталог, содержание которого показано ниже.
- 1
-
Файл с метаданными проекта Quarto (
_quarto.yml). - 2
-
Домашняя страница блога (
index.qmd). - 3
-
Страница о проекте (
about.qmd). - 4
-
Стилевые файлы (
styles.css). - 5
-
Каталог, содержащий посты (
posts/). - 6
-
Общие параметры для директории
posts/(_metadata.yml).
Таким образом, на основе любого из перечисленных выше способов создания блога будет создан проект, основными файлами корневого каталога которого будут: _quarto.yml, index.qmd и about.qmd. Покажем их содержание в минимальном примере на основе стандартного шаблона и далее более подробно рассмотрим возможные варианты для формирования блогов.
project:
type: website
website:
title: "Мой блог"
navbar:
right:
- about.qmd
- icon: github
href: https://github.com/
format:
html:
theme:
- cosmo
- brand
css: styles.css
lang: ru---
title: "Мой блог"
listing:
contents: posts
sort: "date desc"
type: default
categories: true
sort-ui: false
filter-ui: false
page-layout: full
title-block-banner: true
------
title: "О странице"
image: profile.jpg
about:
template: jolla
links:
- icon: github
text: Github
href: https://github.com
---
Об этом блоге...9.2 Листинги
Любая страница блога представляет собой так называемый листинг, которые позволяют автоматически генерировать содержимое страницы (или области страницы) из списка документов Quarto или других пользовательских данных, блог является частным случаем листинга.
Такого рода страницы полезны, когда необходимо, чтобы содержимое страницы автоматически обновлялось по мере добавления, обновления и удаления документов и обеспечивают эффективную навигацию по большому количеству документов.
9.2.1 Содержимое листинга
Для того, чтобы использовать листинги, необходимо указать в YAML-части основного файла index.qmd:
index.qmd
---
title: "Пример листинга"
listing: default
---Тогда все находящиеся в каталоге документы будут сгенерированы и обобщены на единой странице как «списки», при условии что эти документы содержат как минимум метаданные заголовка title.
Можно явно указать, какие документы следует включить в листинг, например, если содержимое находится в каталоге posts, то необходимо включить их таким образом:
index.qmd
---
title: "Пример листинга"
listing:
contents: posts
---Если вы создаете веб-сайт курса, можно использовать функцию списков и объединить каждый урок в папку. Тогда файл index.qmd в этой папке может быть целевой страницей для урока, а другие файлы (презентации, упражнения, заметки инструктора и т. д.) могут также находиться в папке урока, но не обрабатываться как отдельные элементы списка.
Можно делать и более сложные включения или исключения файлов контента на основе регулярных выражений.
index.qmd
---
title: "Пример листинга"
listing:
contents:
- "reports/*.qmd"
- "!lab-notes/*reports.qmd"
---Кроме того, можно указывать, какие документы включаются или исключаются на основе метаданных элементов, используя параметры include и exclude. Эти параметры позволяют указать одно или несколько имен полей и значений, которые должны присутствовать или отсутствовать, чтобы элемент был включен или исключен. Например, чтобы включить только элементы, автором которых является Автор1 или Автор2, необходимо написать:
listing:
contents: posts
include:
author: "{Автор1,Автор2}*"Чтобы исключить любые элементы, автором которых является Автор3:
listing:
contents: posts
exclude:
author: "Автор3*"9.2.2 Типы листингов
Существует три типа листингов:
default— по умолчанию элементы листинга отображаются в виде блога;table— таблица списков;grid— сетка в виде карточек.
index.qmd
---
listing:
contents: posts
type: default
# другие типы:
# type: table
# type: grid
---Не рекомендуется использовать динамические даты (например, today или last-modified) в блог-постах. Это приведет к изменению порядка записей в блоге и ленте каждый раз при рендеринге или изменении документа.
Формат даты, используемый при отображении дат можно установить с помощью параметра date-format как стиль даты (full, long, medium, short или iso). При этом поведение стилей даты будет различаться в зависимости от локали.
Отметим, что существует возможность контролировать количество элементов, отображаемых на странице, с помощью опции page-size.
listing:
page-size: 42Количество элементов по умолчанию, отображаемых на странице, зависит от типа листинга:
| Тип листинга | Количество элементов на странице |
|---|---|
default |
25 |
table |
30 |
grid |
18 |
9.2.3 Список полей
При обработке листинга Quarto используя метаданные из титульного листа каждого считываемого документа для отображения на основной странице списка и заполняет поля для каждого элемента либо непосредственного содержимого документа. Ниже указан список возможных метаданных.
| Имя поля | Описание |
|---|---|
title |
Название статьи, считываемое из поля title вводной части (или в первом разделе H1 документа) |
subtitle |
Подзаголовок статьи |
author |
Автор статьи |
description |
Описание элемента, отображаемое в на странице листинга |
date |
Дата публикации |
image |
Изображение элемента, указанное в поле image либо найденное первое изображение из preview-image, изображения с именем файла, начинающимся с feature, cover или thumbnail, или первое изображение, которое появляется в документе |
image-alt |
Альтернативный текст для изображения |
word-count |
Количество слов в статье |
reading-time |
Оценка времени чтения статьи, рассчитанная путем подсчета слов в элементе и предполагающая скорость чтения 200 слов в минуту |
categories |
Категории элемента, читаемые из поля categories вводной части |
filename |
Имя входного файла |
file-modified |
Дата последнего изменения |
По умолчанию на основной странице отображаются следующие элементы.
| Поле | тип: default |
тип: table |
тип: grid |
|---|---|---|---|
title |
x | x | x |
subtitle |
x | ||
author |
x | x | x |
description |
x | x | |
date |
x | x | x |
image |
x | x |
Несмотря на то, что по умолчанию будут отображаться определенные элементы, соответствующие полям метаданных, с помощью опции fields возможно настроить настроить отображение любых полей для каждого типа листинга. Покажем, как это будет выглядеть на примерах.
default
title: "Мой блог"
listing:
contents: posts
type: default
fields: [image, date, title, author, reading-time, categories, description, reading-time, filename, file-modified]grid
title: "Мой блог"
listing:
contents: posts
type: grid
fields: [image, date, title, author, reading-time, categories, description, reading-time, filename, file-modified]table
title: "Мой блог"
listing:
contents: posts
type: table
fields: [image, date, title, author, reading-time, categories, reading-time]9.2.4 Сортировка
По умолчанию списки в листингах, созданные из документов, сортируются по их названию. Для изменения порядка сортировки можно использовать опцию sort:
listing:
contents: posts
sort: "date"Элемент управления сортировкой позволяет пользователю сортировать по значениям параметров title, date или author. Сортировка по умолчанию будет осуществляться по возрастанию, управлять этим параметром можно с помощью ключа asc или desc соответственно. Ключ сортировки может также содержать одно или несколько полей для сортировки.
listing:
contents: posts
sort:
- "date"
- "title desc"В приведенном выше примере документы в каталоге posts будут отсортированы сначала по дате в порядке возрастания, а затем по названию в порядке убывания. Сортировку можно отключить указав sort: false.
Для отображения сортировки в пользовательском интерфейсе необходимо указать:
listing:
sort-ui: true
# для скрытия сортировки:
# sort-ui: false
Для управления полями, которые будут добавлены в список сортировки, можно задать их имена в ключе sort-ui как в следующем примере.
listing:
sort-ui: [title, date]
9.2.5 Фильтрация
Основная страница листинга включает в себя поле фильтра, расположенное в правом верхнем углу, которое позволяет читателям выполнять поиск. Включить или отключить фильтрацию возможно с помощью параметра filter-ui.
listing:
filter-ui: true
Также, как и в случае сортировки, можно ограничить поиск/фильтрацию определенными полями, указав список полей в ключе filter-ui.
listing:
filter-ui: [title, date]9.3 Компоненты блога
Рассмотрим основные составляющие для создания блогов.
9.3.1 Категории
Категории в блоге позволяют организовать публикации по темам, что значительно облегчает навигацию и позволяют быстро найти необходимую информацию. Для того, чтобы включить категории, вы можете установить параметр следующим образом в файле index.qmd, расположенном в верхнем уровне проекта:
index.qmd
---
listing:
categories: true
---
Полный код для файла index.qmd примера
index.qmd
---
title: "Мой блог"
listing:
contents: posts
sort: "date desc"
type: default
categories: true
sort-ui: false
filter-ui: false
page-layout: full
title-block-banner: true
---Теперь категории можно указать непосредственно в публикации (в нашем случае это файл /posts/post-with-code/index.qmd).
---
title: "Пост, содержащий категории"
author: "Адам Смит"
date: "2025-06-25"
categories: [новости, код, аналитика]
image: "image.jpg"
---
Это пост с исполняемым кодом.Для отображения категорий существует несколько возможностей:
numbered— отображение категорий в алфавитном порядке с указанием в скобках количества их упоминаний;unnumbered— категории отображаются в алфавитном порядке;cloud— категории отображаются в виде облака.
index.qmd
---
listing:
categories: numbered
# другие опции:
# categories: unnumbered
# categories: cloud
---9.3.2 Страница «О сайте»
Страница «О сайте» (или «О блоге») выполняет ряд важных функций: в первую очередь рассказывает об авторе блога, может содержать ссылки и контакты, позволяющие связаться или подписаться; кроме того, такая страница может содержать информацию о чем блог и для кого он, в чем его уникальность и что делает блог запоминающимся.
Рассмотрим YAML структуру файла about.qmd, отвечающего за такую страницу.
- 1
-
Изображение на странице, способами отображения которого можно управлять с помощью параметров:
image-width— допустимая ширина изображения;image-shape— форма изображения на странице (rectangle,roundилиrounded, форму можно изменять только для шаблоновjolla,solana,trestles);image-alt— альтернативный текст для изображения;image-title— название изображения. - 2
-
Встроенный шаблон:
jolla,trestles,broadside,solanaилиmarquee. - 3
-
Набор ссылок на другие ресурсы на основе параметров:
href— ссылка на файл, содержащийся в проекте, или внешний URL-адрес;text— текст для отображения элемента навигации (если не указано, будет использоваться заголовок на основеtitleдокумента);icon— название иконки из набора Bootstrap Icons.
Ниже показан пример Markdown-составляющей файла about.qmd.
Анна Смирнова --- главный специалист по обработке данных в **Сбер**. Когда Анна не занимается инновациями в области платформ обработки данных, она с удовольствием катается на велосипеде и играет со своей любимой кошкой.
## Образование
**Санкт-Петербургский государственный университет** |
Экономист| сентябрь 2019 - июнь 2023
**Университет ИТМО** |
Управление высокотехнологичным бизнесом, магистр | сентябрь 2023 - июнь 2025
## Опыт работы
**Сбер** | Главный специалист по обработке данных | август 2025 --- настоящее времяПредварительный просмотр каждого из шаблонов:





9.3.3 Метаданные
Очень важным аспектом блога является то, что нет необходимости при создании нового поста делать рендер для остальных статей. Настройки такого рода можно установить в файле posts/_metadata.yml. Его главная цель — задать глобальные параметры для всех постов вашего блога в каталоге posts.
По умолчанию в этом файле установлено freeze: true, однако здесь можно определить больше параметров YAML для всех записей блога.
posts/_metadata.yml
# указанные здесь параметры будут применяться ко всем записям в данной папке
# заморозка вычислительных результатов
freeze: true
# включить блоки заголовков в стиле баннеров
title-block-banner: true
# лицензия
license: "CC BY"
# имя автора всех записей в блоге
author:
- name: И.О. Автор
url: https://my_blog.net
affiliation: Организация
affiliation-url: https://my_org.com
orcid: 0000-0001-2222-3333
# настройки для содержания
toc: true
toc-title: "Содержание"
toc-depth: 3
toc-location: left
# опции knitr
execute:
echo: true
message: true
warning: true
# нижний колонтитул
format:
html:
include-after-body: ../footer.html9.3.4 Заморозка вычислительных результатов
В том случае, если блог содержит код, очень важно, чтобы при написании нового поста блога, предыдущие записи были «заморожены», поскольку версии библиотек могут с течением времени измениться. Напомним, что для заморозки вычислительных результатов необходимо установить параметр freeze: true в YAML.
Если проект содержит код на R, когда вы устанавливаете или обновляете библиотеке в записи блога, вызывайте renv::snapshot() как это указано в параграфе Кэширование и заморозка. Это обновит файл renv.lock проекта блога. Скопируйте этот файл в каталог вашей новой записи в блоге и в новой записи блога добавьте следующий фрагмент кода в начало файла index.qmd:
#| echo: false
#| results: hide
renv::use(lockfile = "renv.lock")Теперь каждый раз, когда будет производиться новый рендер блога, данный фрагмент кода даст указание R использовать версии библиотек, которые определены в файле renv.lock данного поста.
9.3.7 RSS-лента
С помощью RSS-каналов можно следить за за обновлениями блога, не завися при этом от социальных сетей или email-рассылок. Это позволяет подписчикам получать новые статьи без необходимости заходить на сам блог. Для того, чтобы включить RSS-канал в Quarto необходимо выполнить следующее.
- В файле
_quarto.ymlнеобходимо добавить URL веб-страницы и описание (без установки этих параметров в файле проекта Quarto не сможет сгенерировать фид).
_quarto.yml
website:
title: "Блог"
site-url: https://www.blog_example.com
description: "Пример блога"- В параметрах основного файла
index.qmdдомашней страницы блога необходимо добавить вариантfeed: true.
index.qmd
---
listing:
feed: true
---Также (опционально) добавить ссылку на RSS-ленту в навигационную панель.
_quarto.yml
website:
title: "Блог"
site-url: https://www.blog_example.com
description: "Пример блога"
navbar:
right:
- icon: rss
href: index.xml9.3.8 Черновики страниц и панели анонсов
Для предварительного просмотра контента перед публикацией можно указать страницы в качестве черновиков. По умолчанию черновики страниц не будут отображаться в навигации, списках, результатах поиска и на карте сайта.
Чтобы указать, что страница или запись является черновиком, можно добавить draft: true в YAML файла index.qmd поста:
posts/post-with-code/index.qmd
---
title: "Пост, содержащий код"
draft: true
---Альтернативно, можно задать YAML-файл:
drafts.yml
website:
drafts:
- posts/post-with-code/index.qmdи затем включить drafts.yml в основной _quarto.yml:
_quarto.yml
website:
title: "Пост, содержащий код"
metadata-files:
- drafts.ymlОпцию черновиков можно включить глобально для всех постов блога.
posts/_metadata.yml
draft: true
Управлять отображением черновиков на сайте и ссылками на черновики документов можно с помощью опции draft-mode:
draft-mode
| Значение | Описание |
|---|---|
gone (по умолчанию) |
Страница не будет отображаться и не будет связана с основной страницей |
unlinked |
Страница будет отображаться и не связана с основной страницей |
visible |
Страница будет отображаться и связана с основной страницей |
Панель объявлений
- 1
-
icon— значок Bootstrap для отображения в панели объявлений. - 2
-
dismissable(значения:trueилиfalse) — может ли пользователь закрыть панель объявлений. - 3
-
content— содержимое панели объявлений. - 4
-
type(значения:primary,secondary,success,danger,warning,info,light,dark) — тип панели объявлений - 5
-
position (значения:
below-navbarилиabove-navbar) — положение панели объявлений.
VS Code
RStudio
Терминал










9.3.5 Включение комментариев
Комментарии в блоге позволяют читателям задавать вопросы, уточнять информацию, исправлять ошибки, помогают автору понять, насколько материал полезен и интересен, делают блог более конструктивным и социальным.
Для обратной связи на страницах блога можно включить комментирование на основе сервиса Utterances как GitHub issues. Для этого необходимо выполнить следующие шаги.
Если комментарии включены на глобальном уровне, возможно на некоторых страницах они не нужны. Для отключения комментариев на определенной странице, необходимо указать
comments: falseкак в примере ниже.