Кратко:
Как вносить изменения в код фреймворка Webasyst, приложений и плагинов, написанных на нём, так, чтобы не отказываться от обновлений, не отслеживать вручную изменившиеся файлы, при этом, чтобы изменения хранились отдельно от самого кода и хорошо поддавались контролю версий git или других VCS? В этой статье будет предложен почти идеальный способ.
Длинно и подробно:
Утверждение первое: Фреймворк Webasyst, на котором основан Shop-Script 6 (раньше был 5), обладает встроенным механизмом обновлений.
Этот механизм позволяет достаточно удобно применять обновления, выпускаемые компанией Webasyst.
Утверждение второе: При этом, расширяемость приложений, таких как Shop-Script базируется исключительно на использовании плагинов, которые должны использовать «хуки» для улучшения или изменения функциональности. Если вам не достаточно «хуков», те, что есть не дают возможностей влиять на нужные вам элементы функциональности, либо вам нужно изменить работу некоей функции самого фреймворка Webasyst, то плагины вам не подойдут.
Утверждение третье: Для изменения функциональности «на уровне ядра» вы можете изменить непосредственно сами классы Webasyst, ShopScript6 и других приложений, и именно это и советуют разработчики Webasyst на своём форуме поддержки в особо сложных случаях. Однако, благодаря встроенному механизму обновлений, ваши изменения могут легко быть затёрты при следующем обновлении.
Что можно сделать?
Способ «в лоб»:
Можно, при изменении каждого системного файла, копировать то, что получилось куда-нибудь в специальное место, откуда копировать обратно при каждом изменении. Но это утомительно, неудобно, и «некрасиво» с точки зрения архитектуры веб-приложения.
Идеальный способ:
Идеально было бы хранить изменения где-то в отдельных файлах, да так, чтобы они применялись к исходным файлам webasyst при запуске приложения, либо при деплое на удалённый сервер.
У меня есть «почти идеальное решение»!