Создаём ZIP архив средствами MODX
Случается так, что на сайте надо запаковать какую-то папку, а по некоторым причинам сделать это невозможно затруднительно. Предлагаю вариант, который практически не требует ничего, кроме MODX и доступа в бек-энд.

В xPDO есть класс xPDOZip, который умеет запаковывать/распаковывать архивы. К сожалению, в самом MODX его функциональность задействована ровно наполовину — распаковать ZIP архив мы можем, а вот запаковать папку в архив не имеем возможности. Предлагаю решение!
Если запустить данный код из компонента Console (спасибо, Николай) или ещё как-нибудь, то в корне сайта будет создан архив site.zip со всеми файлами сайта.
К сожалению, класс xPDOZip не поддерживает возможность исключения файлов по маске, поэтому, если вам не надо паковать какие-то типы файлов (например, .jpg, .png) или папку core/cache, что само по себе естественно, то на данный момент этого сделать невозможно. Я уже отправил PR в xPDO с добавлением такой возможности, но пока не знаю, примут ли…

В xPDO есть класс xPDOZip, который умеет запаковывать/распаковывать архивы. К сожалению, в самом MODX его функциональность задействована ровно наполовину — распаковать ZIP архив мы можем, а вот запаковать папку в архив не имеем возможности. Предлагаю решение!
Решение
Воспользовавшись этим классом мы можем запаковать в архив любую папку на сайте. Если сайт не очень много весит, то получится и весь сайт заархивировать.$zippath = MODX_BASE_PATH . 'site.zip';
$dirpath = MODX_BASE_PATH;
if ($zipClass = $modx->loadClass('compression.xPDOZip', XPDO_CORE_PATH, true, true)) {
if ($zip = new $zipClass($modx, $zippath, array('create' => true, 'overwrite' => true))) {
@unlink($zippath);
$result = $zip->pack($dirpath);
print_r($result);
}
}Если запустить данный код из компонента Console (спасибо, Николай) или ещё как-нибудь, то в корне сайта будет создан архив site.zip со всеми файлами сайта.
К сожалению, класс xPDOZip не поддерживает возможность исключения файлов по маске, поэтому, если вам не надо паковать какие-то типы файлов (например, .jpg, .png) или папку core/cache, что само по себе естественно, то на данный момент этого сделать невозможно. Я уже отправил PR в xPDO с добавлением такой возможности, но пока не знаю, примут ли…
Комментарии: 7
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Fi1osofДобавляет новый пункт контекстного меню joxi.ru/Y2LjLVES9wy54r
Минус в том, что срабатывает только когда элементы подгружаются. Если в момент навешивания события элементы уже есть, то они будут без допэлемента. Но если вовремя вклиниться, то ОК будет.
Конечно получать по айдишнику не круто, лучше через менеджер компонентов брать или типа того (есть, к примеру, поиск по типу компонентов). Это так, набросок.
А вообще, еще лучше слать PR, функционал нужный и должен быть в ядре.
Fi1osof