Чтобы правильно распределить ресурсы в сниппетах в течение года и месяцев в Modx, можно использовать следующий код:
```php
<?php
$parentID = 123; // ID главного родителя
$newsCategoryID = 456; // ID рубрики "Новости"
$dateField = 'publishedon'; // Поле с датой публикации
$containerTemplate = 'container_template'; // Шаблон контейнера коллекции
// Получаем дочерние коллекции второго уровня рубрики "Новости"
$collections = $modx->getCollection('modResource', array(
'parent' => $parentID,
'published' => true
));
foreach ($collections as $collection) {
// Фильтруем ресурсы по полю "publishedon"
$resources = $modx->getCollection('modResource', array(
'parent' => $collection->get('id'),
'published' => true,
'where' => array(
$dateField . ' >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)', // Фильтр по году
$dateField . ' >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)' // Фильтр по месяцу
)
));
foreach ($resources as $resource) {
$publishedDate = $resource->get($dateField);
$year = $publishedDate->format('Y');
$month = $publishedDate->format('m');
$parent = $collection->getChild($year);
if (!$parent) {
// Создаем контейнер коллекции с годом, используя шаблон
$parent = $modx->newObject('modResource');
$parent->set('parent', $collection->get('id'));
$parent->set('pagetitle', $year);
$parent->set('template', $containerTemplate);
$parent->save();
}
$child = $parent->getChild($month);
if (!$child) {
// Создаем контейнер коллекции с месяцем, используя шаблон
$child = $modx->newObject('modResource');
$child->set('parent', $parent->get('id'));
$child->set('pagetitle', $month);
$child->set('template', $containerTemplate);
$child->save();
}
// Перемещаем ресурс в соответствующую коллекцию
$modx->moveObject($resource->get('id'), $child->get('id'));
}
}
?>
```
В данном коде `123` замените на ID вашего главного родителя, `456` на ID рубрики "Новости", `'publishedon'` на имя поля с датой публикации, а `'container_template'` на имя используемого вами шаблона для контейнеров коллекций.
Чтобы настроить автоматический запуск сниппета через CRON, добавьте следующую команду в ваш планировщик задач:
```
php /путь_к_вашему_сниппету.php
```
Убедитесь, что php доступен из командной строки и укажите полный путь к вашему сниппету.