Сниппет pdoArchive предназначен для вывода архива документов сайта с автоматической разбивкой на годы, месяцы и дни. Он группирует ресурсы по датам создания, публикации или редактирования, формируя структурированный архив с подсчетом количества материалов в каждом периоде. Основное применение — создание временных архивов для блогов, новостных разделов, статей, объявлений и любого другого датированного контента.
Сниппет автоматически подсчитывает количество публикаций в каждом периоде и выводит их в виде иерархической структуры год/месяц/день. PdoArchive использует все возможности pdoTools включая JOIN операции, сложную фильтрацию и работу с TV-параметрами.
- Базовый синтаксис использования
- Параметры
- Параметр &dateField
- Шаблоны оформления архива
- Шаблон года — &tplYear
- Шаблон месяца — &tplMonth
- Шаблон дня — &tplDay
- Шаблон документа — &tpl
- Общая обертка — &tplWrapper
- Скрытие уровней иерархии
- Форматирование дат
- Базовый пример архива блога
- Архив новостей с группировкой по дням
- Архив с пагинацией
- Фильтрация по шаблонам и классам
- Работа с TV-параметрами
- Вызов через Fenom
- Оптимизация для больших архивов
- Стилизация архива
Базовый синтаксис использования
Простейший вызов для вывода архива всех ресурсов:
[[!pdoArchive? &parents=`0` ]]
Архив конкретного раздела:
[[!pdoArchive? &parents=`5` ]]
Архив с сортировкой по дате публикации:
[[!pdoArchive? &parents=`10` &dateField=`publishedon` &sortby=`publishedon` ]]
Вызов с пагинацией через pdoPage:
[[!pdoPage? &element=`pdoArchive` &parents=`5` &limit=`20` ]] [[!+page.nav]]
Параметры
PdoArchive принимает все общие параметры pdoTools и добавляет специфичные для работы с датами.
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
&dateField |
createdon |
Поле даты для группировки: createdon, publishedon, editedon |
&dateFormat |
%H:%M |
Формат даты для функции strftime() |
&tpl |
— | Чанк для оформления документа |
&tplYear |
— | Обертка для группы года с плейсхолдерами [[+year]], [[+count]], [[+wrapper]] |
&tplMonth |
— | Обертка для группы месяца с плейсхолдерами [[+month]], [[+month_name]], [[+year]] |
&tplDay |
— | Обертка для группы дня с плейсхолдерами [[+day]], [[+month]], [[+year]] |
&tplWrapper |
— | Общая обертка архива с плейсхолдером [[+output]] |
&wrapIfEmpty |
0 |
Выводить обертку при пустых результатах |
&sortby |
createdon |
Поле для сортировки документов |
&sortdir |
DESC |
Направление сортировки |
&limit |
0 |
Ограничение количества результатов |
&offset |
0 |
Смещение от начала выборки |
&depth |
10 |
Глубина поиска дочерних ресурсов |
&parents |
текущий | Родительские контейнеры для выборки |
&resources |
— | Конкретные ID ресурсов |
&context |
текущий | Контексты для выборки |
&where |
— | Дополнительные условия SQL |
&showHidden |
1 |
Включать скрытые ресурсы |
&showUnpublished |
0 |
Включать неопубликованные |
&showDeleted |
0 |
Включать удаленные |
&hideContainers |
0 |
Исключить контейнеры |
&includeTVs |
— | TV-параметры для включения |
&prepareTVs |
1 |
Подготовить указанные TV |
&processTVs |
— | Обработать указанные TV |
&tvPrefix |
tv. |
Префикс для TV-параметров |
&scheme |
— | Схема генерации ссылок |
&useWeblinkUrl |
1 |
Учитывать тип ресурса в ссылках |
&outputSeparator |
\n |
Разделитель результатов |
&toPlaceholder |
— | Сохранить в плейсхолдер |
&totalVar |
total |
Плейсхолдер для общего количества |
&showLog |
0 |
Показать отладочную информацию |
Параметр &dateField
Параметр &dateField определяет какое поле использовать для группировки по датам.
Группировка по дате создания (по умолчанию):
[[!pdoArchive? &parents=`5` &dateField=`createdon`]]
Группировка по дате публикации:
[[!pdoArchive? &parents=`10` &dateField=`publishedon` &sortby=`publishedon`]]
Группировка по дате последнего редактирования:
[[!pdoArchive? &parents=`15` &dateField=`editedon` &sortby=`editedon`]]
Важно чтобы параметры &dateField и &sortby совпадали для корректной работы.
Шаблоны оформления архива
PdoArchive использует иерархическую систему шаблонов для разных уровней группировки.
Шаблон года — &tplYear
Параметр &tplYear определяет обертку для группы материалов одного года:
[[!pdoArchive? &parents=`5` &tplYear=`@INLINE <h3>[[+year]] <sup>([[+count]])</sup></h3><ul>[[+wrapper]]</ul>`]]
Доступные плейсхолдеры в tplYear:
[[+year]]— год (например 2026)[[+count]]— количество документов за год[[+wrapper]]— содержимое месяцев внутри года
Шаблон месяца — &tplMonth
Параметр &tplMonth задает обертку для группы материалов одного месяца:
[[!pdoArchive? &parents=`5` &tplMonth=`@INLINE <li><h4>[[+month_name]] <sup>([[+count]])</sup></h4><ul>[[+wrapper]]</ul></li>`]]
Доступные плейсхолдеры в tplMonth:
[[+month]]— номер месяца (1-12)[[+month_name]]— название месяца (Январь, Февраль…)[[+year]]— год[[+count]]— количество документов за месяц[[+wrapper]]— содержимое дней внутри месяца
Шаблон дня — &tplDay
Параметр &tplDay определяет обертку для группы материалов одного дня:
[[!pdoArchive? &parents=`5` &tplDay=`@INLINE <li><h5>[[+day]] <sup>([[+count]])</sup></h5><ul>[[+wrapper]]</ul></li>`]]
Доступные плейсхолдеры в tplDay:
[[+day]]— день месяца (1-31)[[+month]]— номер месяца[[+month_name]]— название месяца[[+year]]— год[[+count]]— количество документов за день[[+wrapper]]— список документов дня
Шаблон документа — &tpl
Параметр &tpl задает шаблон для вывода отдельного документа:
[[!pdoArchive? &parents=`5` &tpl=`@INLINE <li>[[+date]] <a href="[[+link]]">[[+menutitle]]</a></li>`]]
Доступные плейсхолдеры в tpl — все стандартные поля ресурса:
[[+id]],[[+pagetitle]],[[+menutitle]],[[+longtitle]][[+link]]— ссылка на документ[[+date]]— отформатированная дата[[+createdon]],[[+publishedon]],[[+editedon]]- Любые TV-параметры указанные в
&includeTVs
Общая обертка — &tplWrapper
Параметр &tplWrapper оборачивает весь архив:
[[!pdoArchive? &parents=`5` &tplWrapper=`@INLINE <div class="archive">[[+output]]</div>`]]
Единственный плейсхолдер: [[+output]] — весь контент архива.
Скрытие уровней иерархии
Чтобы убрать вывод года, месяца или дня, укажите соответствующий шаблон пустым.
Архив без группировки по годам:
[[!pdoArchive?
&parents=`5`
&tplYear=``
&tplMonth=`@INLINE <h4>[[+month_name]] [[+year]] <sup>([[+count]])</sup></h4><ul>[[+wrapper]]</ul>`
&tpl=`@INLINE <li>[[+date]] <a href="[[+link]]">[[+menutitle]]</a></li>`
]]
Архив только по месяцам (без дней):
[[!pdoArchive?
&parents=`5`
&tplDay=``
&tplMonth=`@INLINE <h4>[[+month_name]] [[+year]] <sup>([[+count]])</sup></h4><ul>[[+wrapper]]</ul>`
&tpl=`@INLINE <li><a href="[[+link]]">[[+menutitle]]</a></li>`
]]
Плоский список без группировки:
[[!pdoArchive?
&parents=`5`
&tplYear=``
&tplMonth=``
&tplDay=``
&tpl=`@INLINE <li>[[+publishedon:date=`%d.%m.%Y`]] — <a href="[[+link]]">[[+pagetitle]]</a></li>`
]]
Форматирование дат
Параметр &dateFormat определяет формат даты для плейсхолдера [[+date]].
Формат по умолчанию — время:
[[!pdoArchive? &parents=`5` &dateFormat=`%H:%M`]]
Полная дата и время:
[[!pdoArchive? &parents=`5` &dateFormat=`%d.%m.%Y %H:%M`]]
Только дата:
[[!pdoArchive? &parents=`5` &dateFormat=`%d %B %Y`]]
Использование русских названий месяцев:
[[!pdoArchive? &parents=`5` &dateFormat=`%e %B %Y года`]]
Формат strftime поддерживает следующие спецификаторы:
%d— день месяца (01-31)%m— месяц числом (01-12)%Y— год четырьмя цифрами%y— год двумя цифрами%H— час (00-23)%M— минуты (00-59)%B— полное название месяца%b— сокращенное название месяца
Базовый пример архива блога
Простой архив статей блога с группировкой по месяцам:
[[!pdoArchive?
&parents=`[[++blog_id]]`
&dateField=`publishedon`
&sortby=`publishedon`
&sortdir=`DESC`
&limit=`500`
&tplYear=`@INLINE <div class="year-block"><h2>[[+year]]</h2>[[+wrapper]]</div>`
&tplMonth=`@INLINE
<div class="month-block">
<h3>[[+month_name]] [[+year]] <span class="badge">[[+count]]</span></h3>
<ul class="posts-list">[[+wrapper]]</ul>
</div>`
&tplDay=``
&tpl=`@INLINE
<li class="post-item">
<span class="post-date">[[+publishedon:date=`%d.%m`]]</span>
<a href="[[+uri]]">[[+pagetitle]]</a>
</li>`
]]
Архив новостей с группировкой по дням
Подробный архив с разбивкой до дней:
[[!pdoArchive?
&parents=`10`
&dateField=`publishedon`
&sortby=`publishedon`
&sortdir=`DESC`
&limit=`1000`
&tplYear=`@INLINE <h2 class="archive-year">[[+year]] год</h2>[[+wrapper]]`
&tplMonth=`@INLINE
<div class="archive-month">
<h3>[[+month_name]] ([[+count]])</h3>
[[+wrapper]]
</div>`
&tplDay=`@INLINE
<div class="archive-day">
<h4>[[+day]] [[+month_name]]</h4>
<ul>[[+wrapper]]</ul>
</div>`
&tpl=`@INLINE
<li>
<time>[[+publishedon:date=`%H:%M`]]</time>
<a href="[[+uri]]">[[+longtitle:default=`[[+pagetitle]]`]]</a>
</li>`
]]
Архив с пагинацией
Использование pdoPage для разбивки большого архива на страницы:
[[!pdoPage?
&element=`pdoArchive`
&parents=`5`
&limit=`50`
&dateField=`publishedon`
&sortby=`publishedon`
&sortdir=`DESC`
&tplYear=``
&tplMonth=`@INLINE <h3>[[+month_name]] [[+year]] ([[+count]])</h3><ul>[[+wrapper]]</ul>`
&tpl=`@INLINE <li>[[+date]] <a href="[[+uri]]">[[+pagetitle]]</a></li>`
]]
<div class="pagination">
[[!+page.nav]]
</div>
Фильтрация по шаблонам и классам
Архив только определенного типа ресурсов:
[[!pdoArchive?
&parents=`0`
&templates=`5,7`
&dateField=`publishedon`
&sortby=`publishedon`
]]
Работа с TV-параметрами
Вывод TV в архиве:
[[!pdoArchive?
&parents=`5`
&includeTVs=`thumbnail,author_name`
&tvPrefix=``
&dateField=`publishedon`
&sortby=`publishedon`
&tpl=`@INLINE
<li class="archive-item">
<img src="[[+thumbnail:pthumb=`w=50&h=50&zc=1`]]" alt="[[+pagetitle]]">
<div>
<a href="[[+uri]]">[[+pagetitle]]</a>
<small>Автор: [[+author_name]]</small>
</div>
</li>`
]]
Вызов через Fenom
Использование шаблонизатора Fenom для более чистого синтаксиса:
{'!pdoArchive' | snippet : [
'parents' => '5',
'dateField' => 'publishedon',
'sortby' => 'publishedon',
'sortdir' => 'DESC',
'limit' => '500',
'tplYear' => '@INLINE <h2>{$year}</h2>{$wrapper}',
'tplMonth' => '@INLINE <h3>{$month_name} {$year} ({$count})</h3><ul>{$wrapper}</ul>',
'tpl' => '@INLINE <li><a href="{$uri}">{$pagetitle}</a></li>'
]}
Оптимизация для больших архивов
Для архивов с тысячами материалов используйте параметры оптимизации:
[[!pdoArchive?
&parents=`0`
&limit=`1000`
&maxLimit=`1000`
&scheme=`uri`
&includeContent=`0`
&dateField=`publishedon`
&sortby=`publishedon`
]]
Параметры оптимизации:
&scheme=uri— быстрая генерация ссылок через поле uri&includeContent=0— не выбирать поле content&maxLimit=1000— увеличить лимит для pdoPage- Кешировать вызов если архив статический
Стилизация архива
CSS для базового оформления архива:
.archive { padding: 20px 0; } .year-block { margin-bottom: 40px; } .year-block h2 { font-size: 32px; border-bottom: 2px solid #333; padding-bottom: 10px; margin-bottom: 20px; } .month-block { margin-bottom: 30px; } .month-block h3 { font-size: 24px; color: #555; margin-bottom: 15px; } .month-block .badge { background: #0066cc; color: white; padding: 2px 8px; border-radius: 12px; font-size: 14px; margin-left: 10px; } .posts-list { list-style: none; padding: 0; } .post-item { padding: 8px 0; border-bottom: 1px solid #eee; display: flex; gap: 15px; } .post-date { color: #999; min-width: 50px; } .post-item a { color: #333; text-decoration: none; } .post-item a:hover { color: #0066cc; }






