Как оформить установщик дополнения в документации описано. Но как быть с обновлениями? Логично, чтобы инсталер и обновление были одним пакетом и уже под катом определялось новая это установка или обновление.
#2
24 сентября 2015 в 22:21
По факту для чистой установки и для апгрейта папка package может быть идентичной (файлы просто перезапишутся для старой версии). А вот install.sql должен понимать что ему делать...
В целом, думаю, вполне реализуема концепция "умного пакета установки" 2 в 1
В целом, думаю, вполне реализуема концепция "умного пакета установки" 2 в 1
#3
24 сентября 2015 в 22:31
Ну да, так оно и есть, файлы заменяются. Вот только файлу install.sql как объяснить, что он должен делать. Хорошо бы чтобы при установке скрипт проверял имеется ли уже данный пакет на сайте или нет. И если имеется, то выполнял бы уже не install.sql, а например upgrate.sql
Вот только возможно уже есть какое решение в системе… правда я его не смог проследить, рано мне еще себя считать гуру php. Поэтому спрашиваю, может кто знает?
Вот только возможно уже есть какое решение в системе… правда я его не смог проследить, рано мне еще себя считать гуру php. Поэтому спрашиваю, может кто знает?
Сегодня в 09:42
#4
24 сентября 2015 в 22:34
И кстати, на сколько я понял проверка существования дополнения вообще не производится. Т.е. можно одно и тоже дополнение установить несколько раз. И оно несколько раз запишется в БД, только с разным ID соответственно.
Тут есть пример файла обновлятора. Он тоже называется и выглядит как инсталятор. Поэтому в нашем файле install.php инсталятора, можно сделать запрос в БД для выяснения есть ли компонент с таким именем и какая у него версия. Затем используя функцию importDump( 'путь до файла sql' ) из файла cmsDatabase выполнить запрос в БД. Если нет компонента, дампим install.sql если есть и версия ниже нашей, дампим update.sql. Если есть и такая же версия, то просто меняем файлы.
Что касается замены файлов при обновлении, то не всегда можно делать замену всех файлов автоматически (например файл manifest.php, где объявлены хуки). Ведь нам неизвестно, были ли правки данного файла или нет (например пользователь сам или другой разработчик уже внесли свои коррективы в этот файл). Поэтому если не было обновлений данного файла в нашем компоненте, то его желательно исключить из инсталятора данного обновления. Поэтому надо делать два архива отдельно, один для установки, другой для обновления, или в одном архиве две папки, типа packages и packages_update.
и при установке определять какой пользоваться.
Как вариант можно прописать в файле sqlИ оно несколько раз запишется в БД, только с разным ID соответственно.
DELETE FROM `{#}controllers` WHERE `name` = 'имя' AND `author` = 'автор'; INSERT INTO `{#}controllers` (`title`, `name`, `is_enabled`, `options`, `author`, `url`, `version`, `is_backend`) VALUES ('Заголовок, 'имя', 1, '', 'автор', 'http://instantcms.ru/users/автор', 'версия', 1);
и при установке определять какой пользоваться.
#7
25 сентября 2015 в 10:17
Loadырь, правильно говорит, install.php вам на что? В функции install_package() производите все проверки, потом добавляете/изменяете/удаляете что необходимо. Все запросы к базе можно проводить прямо в коде.