2010-04-13 2 views
3

У меня есть следующая структура каталогов в приложении CMS мы писали:Версия управляет системой управления контентом?

/application 
/modules 
    /cms 
     /filemanager 
     /block 
     /pages 
     /sitemap 
    /youtube 
    /rss 
/skin 
    /backend 
     /default 
     /css 
     /js 
     /images 
    /frontend 
    /default 
     /css 
     /js 
     /images 

Приложения содержит код, специфичный для текущей реализации CMS, то есть код для этого конкретного СХ. Модули содержат многократно используемые фрагменты кода, которые мы совместно используем в проектах, таких как библиотеки для работы с YouTube или RSS-каналами. Мы включаем их в качестве подмодулей git, чтобы мы могли обновить модуль на любом веб-сайте и отбросить изменения во всех других проектах. Это позволяет легко применить изменения к нашему коду и распространить его. Мы хотели превратить CMS в модуль, чтобы получить ту же выгоду - мы можем запустить весь проект под контролем источника, а затем обновить cms по мере необходимости через git-подмодуль. Однако мы столкнулись с проблемой: Для работы cms требуется javascript/images/css, чтобы он работал правильно.

Вещи, которые мы думали о:

  • Мы могли бы создать 2 подмодулей, один для ЦМС-кожи и один для СЦИ, но это означает, что вы не можете «мерзавец тянуть» один вариант, не имея некоторое представление о том, какие версии скинов работают с версиями cms. то есть версия 1.2.2 CMS может иметь проблемы с 1.0.3 CMS-Skin

  • Мы могли бы добавить кожу к модулю СХ, но это имеет следующие проблемы:

    1. кожа должна быть доступна на документе root, код модуля не должен быть, и, если он есть, вероятно, он должен быть защищен с помощью .htaccess
    2. Это не похоже на то, чтобы связывать активы с кодом php
    3. Мы могли бы создать символическую связь между/skin/backend/to/modules/cms/skin, но вызывает ли это какие-либо проблемы с безопасностью, и хотим ли мы потребовать что-то вроде символической ссылки для приложение для работы?
    4. Мы могли бы создать крючок для git или скрипта оболочки, который копирует файлы из модулей/cms/skin в skin/backend при обновлении, но это означает, что мы теряем возможность редактировать основные файлы CMS в проекте, а затем нажимаем их назад

Как это обычно делается в больших масштабах CMS,? Как можно получить исходный код для cms под управлением версии, работать с приложением для клиента, а затем обновлять исходный код как выпуски и предоставляться поставщиком? Как делают такие приложения, как Magento или Drupal?

ответ

2

Я не знаком с проектами CMS, но вы могли бы:

  • создать 2 подмодулей, один для ЦМС-кожи и один для СЦИ
  • используют ЦМС-кожу в виде вложенного подмодуль в СЦИ

cms будет «основным проектом» для cms-скина, то есть каждый раз, когда вы совершаете cms, вы сначала перенесли cms-skin, а «cms commit» вставит точную ссылку SHA1 в cms- скин, используемый во время фиксации.

Таким образом вы можете вытащить только cms, и с ним придет точная версия cms-skin, в которой вы нуждаетесь.

Подробнее см. Здесь SO answer об истинной природе подмодулей.

+0

уверенный - я понимаю, что git repos отслеживает текущее состояние подмодулей через их ша-хэш, проблема в том, что помещение cms-skin внутри cms вызывает много других проблем, которые я объяснил выше – Mike

+0

@Mike: да, но я не понял, каковы ограничения. Идея заключалась бы в том, чтобы вставить/вставить скин в соответствующем месте в пределах cms, b/вставить версию скина (т. Е. Специальную ветвь) с реорганизованным контентом для соответствия его новому местоположению (то есть внутри cms) – VonC

+0

«Кожа должна быть доступный в корневом каталоге документа, код модуля не должен быть, и, если это возможно, он, вероятно, должен быть защищен с помощью .htaccess " – Mike