Если кнопки «Обновить» нет
Битрикс показывает кнопку обновления, только когда версия в install/version.php больше той, что записана в b_module. Совпали — кнопки нет, и это не поломка, а ровно то, что означает: с точки зрения системы обновлять нечего.
Отсюда и способы.
А. Правильный: поднять версию до выкладки
Версия в install/version.php должна расти с каждой выкладкой. Если файлы уже залиты, а версия в них прежняя, поднимите её и залейте заново.
Это единственный способ, который не оставляет расхождений между тем, что записано в базе, и тем, что лежит на диске.
Б. Понизить записанную версию
Если поднять версию в коде нельзя — например, вы возвращаетесь к уже выложенной сборке, — понизьте запись в базе. После этого кнопка появится, а обновление запишет правильную версию само:
UPDATE b_module SET VERSION = '0.0.1' WHERE ID = 'mrlexndr.translate';
В. Вызвать обновление напрямую
Одноразовый скрипт. Положите в bitrix/admin/, откройте в браузере под администратором, удалите сразу после:
<?php
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php');
global $USER, $APPLICATION;
if (!$USER->IsAdmin()) { $APPLICATION->AuthForm(''); }
CModule::IncludeModule('mrlexndr.translate');
$module = CModule::CreateModuleObject('mrlexndr.translate');
if (!method_exists($module, 'DoUpdate')) {
echo 'У модуля нет DoUpdate() — обновлять нечем.';
return;
}
if ($module->DoUpdate()) {
echo 'OK';
} else {
// Причину кладёт сам установщик: например, версия PHP ниже требуемой.
$e = $APPLICATION->GetException();
echo 'Обновление отменено: ' . ($e ? $e->GetString() : 'причина не указана');
}
Печатать OK безусловно нельзя. DoUpdate() умеет отказываться — скажем, когда на сервере PHP ниже требуемого модулем, — и тогда безусловное OK показало бы успех там, где ничего не произошло. Разбирать возврат обязательно, иначе скрипт учит не замечать поломку.
Проверка на администратора здесь не для красоты: скрипт выполняет миграции и раскладывает файлы. Оставленный в bitrix/admin/ после использования, он становится способом сделать это кому угодно, кто угадает имя файла.
Если кнопка есть, но ничего не меняется
Скорее всего, модуль работает не из того каталога, в который вы залили файлы: копия в /local/modules/ перекрывает копию в /bitrix/modules/. Как проверить, откуда он грузится на самом деле, — Куда класть модуль.