Задать вопрос Связаться с нами
  • Главная
  • Услуги
    • Исправление ошибок
    • Доработка сайтов
    • Обслуживание сайтов
    • Техподдержка сайтов
    • Веб-разработка
    • Интернет-магазины
  • Модули
    • Антирутин
    • SEO - мастер
    • SMS-уведомления
    • Утилиты от «Webdebug»
    • SMS-сообщения (Lite)

    • Все наши модули

    • Все модули Битрикс:Marketplace
  • Акции
  • Поддержка
  • Блог
  • О нас
    • Отзывы
    • Новости
    • Реквизиты

    • Контакты
  • Главная
  • Услуги
    • Исправление ошибок
    • Доработка сайтов
    • Обслуживание сайтов
    • Техподдержка сайтов
    • Веб-разработка
    • Интернет-магазины
  • Модули
    • Антирутин
    • SEO - мастер
    • SMS-уведомления
    • Утилиты от «Webdebug»
    • SMS-сообщения (Lite)

    • Все наши модули

    • Все модули Битрикс:Marketplace
  • Акции
  • Поддержка
  • Блог
  • О нас
    • Отзывы
    • Новости
    • Реквизиты

    • Контакты
Главная
Блог
1С-Битрикс
Сбор файлов обновления модулей

Сбор файлов обновления модулей

Недавно мне понадобилось, во что бы то ни стало, получить файлы устанаваемых на сайт обновлений модулей..

В целом, механизм обновлений штука довольно понятная, тем более что ее код почти полностью открыт.

Поэтому решение моей задачи оказалось довольно простым. Привожу код:

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.

Благодаря этому посту у Вас появляется возможность максимально подробно отслеживать изменения в версиях, а также сохранять файлы разных версий.

А в случае чего, можно немного модифицировать код так, чтобы установить модули из маркетплейса точно определенной версии. Однако, это сработает только если обновления загружаются поочередно, а если же модуль изначально скачивается актуальной версией, то отследить любое предыдущее обновление уже невозможно.


Автор: Денис Сон
Дата публикации: 05.04.2017
Просмотров: 4746

Комментарии

Павел
21.02.2020 14:47:12
Еще раз спасибо за статью. Прям в самое время. Обновления аспро выдернул.
Ответ администрации:
Пожалуйста! :)
Павел
21.02.2020 13:21:50
Благодарю! Подсказали.
+100 к карме)
Павел
21.02.2020 12:07:43
Благодарю за советы.
Вчера много времени с этим провел в итоге даже обнаружил еще много подводных камней. По поводу обновлений.

https://prnt.sc/r5koom

Вдруг что то посоветуете. Буду оч раД!
Ответ администрации:
Советую установить какое-нибудь готовое решение от известной компании, установить сбор обновлений как в данной статье, затем если нужно - снизить версию до 1.0.0, и установить все обновления.
А потом смотреть архивы обновлений и в них файлы updater.php - изучать как у них это сделано.
Павел
20.02.2020 21:33:33
Не не )) у меня свой модуль)

я сделал изменения в файлах публички и при принятии обновлений файлы перезаписываются в самом модуле и я смогу сделать перезапись в файлах шаблона.

вот я оставил вопрос на тосторе https://qna.habr.com/q/718481
Ответ администрации:
Попробуйте делать не через $updater->CopyFiles, а каким-либо другим способом, например CopyDirFiles().
Павел
20.02.2020 20:50:37
Добрый вечер.
А как обновить файлы публички при установлении обновлений модуля через файл updater.php
Ответ администрации:
Не совсем понятно, вам нужно при обновлении чужого модуля делать изменения в своей публичной части? Если так, то это, на мой взгляд, плохое решение какой бы то ни было задачи.

Но если очень нужно - файл указан в статье, и место тоже. Можете в этом месте делать все что угодно, писать любой свой код. Но имейте ввиду - после обновлений Битрикса этот код может перезатереться.
111111111
04.06.2017 11:06:43
Автор, спасибо. Не сразу понял как посмотреть исходники обновлений модулей.

Категории блога:

  • 1С-Битрикс 10
  • Общее о создании сайтов 13
  • HTML, CSS, JS, jQuery 2
  • Без категории 9
Ссылки
  • Главная
  • Модули
  • Акции
  • Услуги
  • Отзывы
  • Блог
  • Новости
  • Контакты
  • Реквизиты
Поиск по сайту
Наши контакты

По всем вопросам обращайтесь:

Электронная почта: info@webdebug.ru

Telegram: webdebug

Форма обратной связи

Webdebug Bitrix certified
Webdebug QR-code
© ООО «Веб дебаг», 2011 – 2025. Политика конфиденциальности.
×
У Вас вопрос?
Загрузка ...
×
Связаться с нами
Загрузка ...
×
Комментарий к статье
Загрузка ...