'resource/delete' без удаления дочерних ресурсов
В продолжение этой темы:
Удаление ресурсов в MODX Revolution
Вопрос: как «сказать» процессору 'resource/delete', что удалять дочерние ресурсы не нужно ?
Создаю, обновляю, удаляю ресурсы программно (через modx API). В процессе такого импорта некоторые ресурсы, которые не должны быть удалены, в определённые моменты времени могут оказаться в подчинении у удаляемого ресурса. В ходе выполнения процессора 'recource/delete' в отношении удаляемого ресурса все его потомки тоже удаляются.
В качестве одного из вариантов вижу написание собственного процессора удаления путём наследования стандартного 'resource/delete'. Можно ли реализовать задачу более простым способом?
Удаление ресурсов в MODX Revolution
Вопрос: как «сказать» процессору 'resource/delete', что удалять дочерние ресурсы не нужно ?
Создаю, обновляю, удаляю ресурсы программно (через modx API). В процессе такого импорта некоторые ресурсы, которые не должны быть удалены, в определённые моменты времени могут оказаться в подчинении у удаляемого ресурса. В ходе выполнения процессора 'recource/delete' в отношении удаляемого ресурса все его потомки тоже удаляются.
В качестве одного из вариантов вижу написание собственного процессора удаления путём наследования стандартного 'resource/delete'. Можно ли реализовать задачу более простым способом?
Комментарии: 5
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Вот исходный процессор.
Если файл с этим процессором имеет имя «sdelete.class.php» и лежит там же, где и все прочие стандартные процессоры modx, то вызов будет выглядеть так:
Если файл с процессором лежит в собственной папке PROC_PATH и имеет имя «sResourceDeleteProcessor.class.php», то вызов будет таким:
=============================================================================================
1.В данном примере реализовано опциональное отключение удаления дочерних ресурсов и очистки кэша. И реализовано это на базе те же самых свойств, которые передаются вторым параметром в метод modX::runProcessor().
2. Отключать очистку кэширования может быть полезно при пакетной обработке ресурсов для сокращения времени обработки. Аналогично можно отключить и логирование (перегрузкой метода modResourceDeleteProcessor::logManagerAction())
3.В процессорах «resource/create» и «resource/update» параметр «syncsite» уже обрабатывается (по умолчанию syncsite = true), тогда как стандартный процессор «resource/delete» кэш очищает всегда
4.При обработке ресурсов кэш очищается только в следующих разделах: 'db', 'auto_publish', 'context_settings' и 'resource'
А с помощью запроса (например, в myAdmin), всегда можно найти и перепривязать все «подвешенные» ресурсы после очистки корзины. Этот же запрос можно и на xPDO составить, а перепривязывать через процессор 'resource/update'.
Можно перегрузить процессор очистки корзины, чтобы все подчинённые ресурсы окончательно удаляемых ресурсов перемещались в определённое место (или к родителю окончательно удаляемого ресурса). Только для этого нужно будет где-то хитро подменить процессор.
В результате в плагинах на OnDocFormDelete и OnResourceDelete можно использовать свойства «syncsite» (как в OnDocFormSave) и «deleteChildren»:
Свойство «syncsite» в плагинах может понадобиться, например, для очистки собственных разделов кэша, связанных с удаляемым ресурсом.