Восстановление ресурса из кэша

Внимание! Это не вопрос, а готовое решение. В готовые решения не могу разместить, т.к. не хватает рейтинга.
Всем привет. Как-то столкнулся с такой проблемой, что вся кодировка бэкапа базы данных была сбита и оставался только чистый кэш. Оставляю на случай, если кому поможет решить проблему.
Таким же успехом можно прогнать и системные настройки. Здесь я показал в пример только восстановление полей ресурса, 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();
    }
}
Кирилл Киселев
26 сентября 2018, 22:59
modx.pro
868
+1

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0