Как выполнить ресолвер только при обновлении с 3 на 4 версию компонента?
Добрый день! В моем компоненте планируются большие правки базы и нужно при обновлении на новую версию компонента внести изменения в базу (скопировать данные из одной таблицы в другую), но нужно выполнить это только 1 раз, при обновлении с 3 на 4 версию, не выполнять при новой установке и не выполнять при деинсталляции и установки заново. Как это сделать? Или может можно как нибудь в ресолвере получить номер обновляемой( предыдущей) версии и номер устанавливаемой?
Поблагодарить автора
Отправить деньги
Комментарии: 5
Посмотрел код установщика пакетов. Похоже никак нельзя предыдущею версию нельзя получить :(
Проверяй не версию пакета, а существование новой таблицы и данных в ней.
Спасибо. Этот вариант как-то не пришел в голову :)
Можно так
$c = $modx->newQuery('transport.modTransportPackage');
$c->select('version_major')
->where(array(
'package_name' => 'ИМЯ ПАКЕТА',
))
->sortby('version_major','DESC')
->limit(1);
$version = (int) $modx->getValue($c->prepare());
if ($version == 3) {
...
}
Кажется немного не верно. Здесь https://github.com/modxcms/revolution/blob/769b4f498bfc486b6417835f01443666178abc72/core/model/modx/transport/modtransportpackage.class.php#L233 Происходит сохранение пакета в таблицу до его установки. То есть ваш запрос вернет версию, которая ставиться. Надо добавить фильтр по installed не null.
Наверно так
Наверно так
$c = $modx->newQuery('transport.modTransportPackage');
$c->select('version_major')
->where(array(
'package_name' => 'ИМЯ ПАКЕТА',
'installed:!=' => null,
))
->sortby('version_major','DESC')
->limit(1);
$version = (int) $modx->getValue($c->prepare());
if ($version == 3) {
...
}
Проверять надо. Но проверка на пустое содержимое таблицы мне подходит. Надеюсь никто не додумается поставить пакет и потом сразу же обновить.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.