Как правильно офрмлять пакеты обновлений

 
Посетитель
small user social cms
Медаль
Сообщений: 195
Как оформить установщик дополнения в документации описано. Но как быть с обновлениями? Логично, чтобы инсталер и обновление были одним пакетом и уже под катом определялось новая это установка или обновление.
Редактировалось: 1 раз (Последний: 24 сентября 2015 в 20:56)
СельхозМолл (сделано на Инстанте 2
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1164
По факту для чистой установки и для апгрейта папка package может быть идентичной (файлы просто перезапишутся для старой версии). А вот install.sql должен понимать что ему делать...
В целом, думаю, вполне реализуема концепция "умного пакета установки" 2 в 1 smile
Реклама
cms
Посетитель
small user social cms
Медаль
Сообщений: 195
Ну да, так оно и есть, файлы заменяются. Вот только файлу install.sql как объяснить, что он должен делать. Хорошо бы чтобы при установке скрипт проверял имеется ли уже данный пакет на сайте или нет. И если имеется, то выполнял бы уже не install.sql, а например upgrate.sql
Вот только возможно уже есть какое решение в системе... правда я его не смог проследить, рано мне еще себя считать гуру php. Поэтому спрашиваю, может кто знает?
СельхозМолл (сделано на Инстанте 2
Посетитель
small user social cms
Медаль
Сообщений: 195
И кстати, на сколько я понял проверка существования дополнения вообще не производится. Т.е. можно одно и тоже дополнение установить несколько раз. И оно несколько раз запишется в БД, только с разным ID соответственно.
СельхозМолл (сделано на Инстанте 2
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1164
При беглом осмотре, допиливать вроде здесь ..\system\controllers\admin\actions\install_finish.php
Pull request писать сюда. Уверен фича будет очень удобна для разработчиков, чтобы не собирать по несколько пакетов на обновление.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3818
Тут есть пример файла обновлятора. Он тоже называется и выглядит как инсталятор. Поэтому в нашем файле install.php инсталятора, можно сделать запрос в БД для выяснения есть ли компонент с таким именем и какая у него версия. Затем используя функцию importDump( 'путь до файла sql' ) из файла cmsDatabase выполнить запрос в БД. Если нет компонента, дампим install.sql если есть и версия ниже нашей, дампим update.sql. Если есть и такая же версия, то просто меняем файлы.
Иван Шкута:
И оно несколько раз запишется в БД, только с разным ID соответственно.
Как вариант можно прописать в файле sql
Код PHP:
  1. DELETE FROM `{#}controllers` WHERE `name` = 'имя' AND `author` = 'автор';
  2. INSERT INTO `{#}controllers` (`title`, `name`, `is_enabled`, `options`, `author`, `url`, `version`, `is_backend`) VALUES
  3. ('Заголовок, 'имя', 1, '', 'автор', 'http://instantcms.ru/users/автор', 'версия', 1);
Что касается замены файлов при обновлении, то не всегда можно делать замену всех файлов автоматически (например файл manifest.php, где объявлены хуки). Ведь нам неизвестно, были ли правки данного файла или нет (например пользователь сам или другой разработчик уже внесли свои коррективы в этот файл). Поэтому если не было обновлений данного файла в нашем компоненте, то его желательно исключить из инсталятора данного обновления. Поэтому надо делать два архива отдельно, один для установки, другой для обновления, или в одном архиве две папки, типа packages и packages_update.
и при установке определять какой пользоваться.
Редактировалось: 1 раз (Последний: 25 сентября 2015 в 09:34)
Посетитель
small user social cms
Медаль
Сообщений: 134
Loadырь, правильно говорит, install.php вам на что ? В функции install_package() производите все проверки, потом добавляете/изменяете/удаляете что необходимо. Все запросы к базе можно проводить прямо в коде.
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.