У меня есть следующая структура каталогов в приложении CMS, которое мы написали:
/application
/modules
/cms
/filemanager
/block
/pages
/sitemap
/youtube
/rss
/skin
/backend
/default
/css
/js
/images
/frontend
/default
/css
/js
/images
Приложение содержит код, специфичный для текущей реализации CMS, т.е. код для этого конкретного cms.
Модули содержат многократно используемые фрагменты кода, которыми мы делимся между проектами, например библиотеки для работы с лентами YouTube или RSS. Мы включили их как подмодули git, чтобы мы могли обновить модуль на любом веб-сайте и перенести изменения во все другие проекты. Это позволяет легко применить изменения в нашем коде и распространять их. Мы хотели превратить CMS в модуль, чтобы получить то же преимущество - мы можем запустить весь проект под управлением исходного кода, а затем обновить cms по мере необходимости через подмодуль git. Однако мы столкнулись с проблемой:
для правильной работы cms требуется javascript / images / css.
Вещи, о которых мы думали:
Мы могли бы создать 2 подмодуля, один для обложки cms и один для cms, но это означает, что вы не можете «git pull» одну версию, не имея представления о том, какие версии скина работают с какими версиями cms. то есть версия 1.2.2 CMS может иметь проблемы с 1.0.3 CMS-Skin
Мы могли бы добавить скин к модулю cms, но это имеет следующие проблемы:
- Скин должен быть доступен в корне документа, код модуля не должен быть, и если это так, его, вероятно, следует защитить с помощью .htaccess
- Кажется, что нет смысла связывать активы с php кодом
- Мы могли бы создать символическую ссылку между / skin / backend / для перехода на / modules / cms / skin, но это вызывает какие-то проблемы с безопасностью, и мы хотим, чтобы что-то вроде символической ссылки для приложения работало?
- Мы могли бы создать ловушку для git или сценарий оболочки, который копирует файлы из модулей / cms / skin в skin / backend при обновлении, но это означает, что мы теряем возможность редактировать основные файлы CMS в проекте, а затем отправлять их назад
Как это обычно делается в крупномасштабных смс? Как можно получить исходный код для cms под управлением версией, поработать над приложением для клиента, а затем обновить исходный код в виде выпусков, предоставленных поставщиком? Как такие приложения, как Magento или Drupal, делают это?