Недавно мне понадобилось, во что бы то ни стало, получить файлы устанаваемых на сайт обновлений модулей..
В целом, механизм обновлений штука довольно понятная, тем более что ее код почти полностью открыт.
Поэтому решение моей задачи оказалось довольно простым. Привожу код:
function CreateUpdateArchive($strUpdaterDir){ if(is_file($strUpdaterDir.'/install/version.php')){ require $strUpdaterDir.'/install/version.php'; $strModuleID = end(explode('/',$strUpdaterDir)); $strDir = $_SERVER['DOCUMENT_ROOT'].'/_updates/'.$strModuleID; if(!is_dir($strDir)){ mkdir($strDir, BX_DIR_PERMISSIONS, true); } $strArcFileName = $strDir.'/'.$arModuleVersion['VERSION'].'.tar.gz'; @unlink($strArcFileName); require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/classes/general/tar_gz.php'); $obArc = CBXArchive::GetArchive($strArcFileName, 'TAR.GZ'); if($obArc instanceof IBXArchive) { $obArc->SetOptions(array( 'COMPRESS' => true, 'ADD_PATH' => false, 'REMOVE_PATH' => $strUpdaterDir, 'CHECK_PERMISSIONS' => false )); $arPackFiles = array($strUpdaterDir); $obArc->pack($arPackFiles, ''); } unset($obArc); } }
Этот код необходимо добавить в /bitrix/php_interface/init.php
Далее, необходимо в файле /bitrix/modules/main/classes/general/update_client_partner.php найти строку:
$updateDirTo = $_SERVER["DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH."/modules/".$arModules[$i];
И сразу после этого вставить строку:
CreateUpdateArchive($updateDirFrom);
Все! Теперь все обновления будут складываться в папку /_updates/ в виде tar.gz-архивов, откуда их можно скачивать и изучать.
Имейте ввиду, что добавление этой единственной строки в данный файл считается модифицированием файла ядра. Конечно, это не беда, но монитор качества при проверке модифицированных файлов ядра на эту проблему укажет.
Еще замечание: данный архив не является тем архивом, который закачивает разработчик в Маркетплейс в качестве обновления, это немного модифицированный архив, где, во-первых, отсутствуют языковые файлы (description.ru, description.en), а файл updater.php в названии содержит версию обновления, например, updater1.2.1.php.
Благодаря этому посту у Вас появляется возможность максимально подробно отслеживать изменения в версиях, а также сохранять файлы разных версий.
А в случае чего, можно немного модифицировать код так, чтобы установить модули из маркетплейса точно определенной версии. Однако, это сработает только если обновления загружаются поочередно, а если же модуль изначально скачивается актуальной версией, то отследить любое предыдущее обновление уже невозможно.
+100 к карме)
Вчера много времени с этим провел в итоге даже обнаружил еще много подводных камней. По поводу обновлений.
https://prnt.sc/r5koom
Вдруг что то посоветуете. Буду оч раД!
А потом смотреть архивы обновлений и в них файлы updater.php - изучать как у них это сделано.
я сделал изменения в файлах публички и при принятии обновлений файлы перезаписываются в самом модуле и я смогу сделать перезапись в файлах шаблона.
вот я оставил вопрос на тосторе https://qna.habr.com/q/718481
А как обновить файлы публички при установлении обновлений модуля через файл updater.php
Но если очень нужно - файл указан в статье, и место тоже. Можете в этом месте делать все что угодно, писать любой свой код. Но имейте ввиду - после обновлений Битрикса этот код может перезатереться.