Восстановление ресурса из кэша
Внимание! Это не вопрос, а готовое решение. В готовые решения не могу разместить, т.к. не хватает рейтинга.Всем привет. Как-то столкнулся с такой проблемой, что вся кодировка бэкапа базы данных была сбита и оставался только чистый кэш. Оставляю на случай, если кому поможет решить проблему.
Таким же успехом можно прогнать и системные настройки. Здесь я показал в пример только восстановление полей ресурса, TV к нему и чанков.
<?php
$resources = $modx->getIterator('modResource');
// Указываем путь к кэшу
$options = array(
xPDO::OPT_CACHE_KEY => 'resource/web/resources',
);
foreach ($resources as $resource) {
// Берём каждый ресурс по идентификатору
$cache = $modx->cacheManager->get($resource->get('id'), $options);
// Массив параметров ресурса
$data = $cache['resource'];
// Заносим все поля ресурса из кэша
$resource->fromArray($data);
foreach($data as $property) {
// Дополнительное поле выглядит как массив
if (is_array($property)) {
// Если это массив, то берём название поля и его значения в 1-й и 2-й ячейках
$resource->setTVvalue($property[0], $property[1]);
}
}
$resource->save();
// Бывает слетает кодировка и в чанках, восстанавливаем чанки, которые относятся к ресурсу
$chunks = $cache['sourceCache']['modChunk'];
foreach ($chunks as $key => $chunk) {
$modChunk = $modx->getObject('modChunk', array('name' => $key));
// getIterator тут не работает
$modChunk->setContent($chunk['fields']['snippet']);
$modChunk->save();
}
}