Dorzucę swoje dwa grosze
Kod patcha z opisem:
<?php
// forbid direct access to file
defined("_VALID_ACCESS") || die('Direct access forbidden');
// module to install. If it's installed don't run patch - required to avoid issues with double run
$module = 'Custom/MyModule';
if (ModuleManager::is_installed($module) < 0) {
// install module
ModuleManager::install($module, 0);
// add columns
PatchUtil::db_add_column('my_table', 'test_column', 'I4'); // integer 4bytes
PatchUtil::db_add_column('my_table', 'test_column2', 'X'); // long text
PatchUtil::db_add_column('my_table', 'test_column3', 'C(64)'); // varchar(64)
}
Tak jak opisałem. Kilka słów wytłumaczenia. Cyfra zero w ModuleManager::install oznacza wersję plików (ModuleCommon_0, Module_0). Lepiej ją podać, bo bez tego będzie próba wykrycia, co może źle zadziałać.
Do zmiany tabel istotne aby używać wskazanych funkcji statycznych w PatchUtil ponieważ mają one dodatkowe sprawdzenia przed podwójnym dodaniem.
I ogólnie patch warto pisać tak, że jak się go dwa razy uruchomi to nic się nie stanie i nie dostaniemy błędu.
Pozdrawiam,
Adam