2012-03-27 2 views
0

У меня есть приложение, которое использует HMVC и codeigniter. Все приложение находится в git repo под названием MapIt-USA. Я просто столкнулся с сценарием, когда я развернул это приложение для клиента xyz, и они хотели, чтобы я настраивал внешний вид макета. Однако я внес изменения, когда я делаю backend-контроллер, библиотеку, патчи/обновления модели, и я нажимаю эти обновления в исходное положение и выпадаю из источника на сервере. Мне нужно, чтобы избежать перезаписи этих изменений в представлениях.CodeIgniter + App + App Updates с настройками вида

Любые идеи?

ответ

1

Основная идея для перегрузки представления (или любой файл, на самом деле):

  • магазин пользовательские представления где, где основные обновления приложений их не будет перезаписывать. Дайте им такое же имя, как и по умолчанию.
  • Измените загрузчик шаблонов, чтобы сначала проверить его, если он не существует, а затем использовать его по умолчанию. Если у вас нет настраиваемого решения по загрузке шаблонов, пришло время написать его или расширить класс CI Loader, чтобы приспособить это изменение.

Возможно, наступит время, когда вам нужно перегрузить или расширить больше, чем просто виды: возможно, файлы конфигурации, помощники, языковые файлы или даже контроллеры. Таким образом, вы можете начать думать о том, как справиться с этим в долгосрочной перспективе. Вы можете подражать тому, как работает CI, сначала просматривая файлы system/, позволяя продлить или перегрузить файлы application/. Разумеется, адаптация будет нести нагрузку на совместимость.

Короткий пример с видом:

class MY_Template_Loader { 

    // We'll assume this is in your application/ dir 
    private $custom_path = 'custom_views/'; 

    function load($file = NULL) 
    { 
     // This is the default view 
     $view = $file; 

     // Is there a file with the same name in the custom dir? 
     // If so, use that instead of the default 
     if (is_file(APPPATH.$this->custom_path.$file.'.php')) 
     { 
      // This is a little bit of a trick 
      // Use a relative path from CI's default view dir 
      $view = '../'.$this->custom_path.$file; 
     } 
     get_instance()->load->view($view); 
    } 

} 

Использование в методе контроллера:

function my_method() 
{ 
    $this->my_template_loader->load('my_method/index'); 
    // If "APPPATH/custom_views/my_method/index.php" exists it will be loaded 
    // Otherwise it will try to load "views/my_method/index.php" 
} 

Как вы на самом деле сделать это до вас, но это основная идея.

+0

Я использую библиотеку шаблонов phil sturgeon для CI, мне интересно, есть ли что-то для этого. – gorelative

+0

Вам лучше создавать функциональность самостоятельно, так как ваши потребности довольно специфичны. Там действительно не так много, вам нужна помощь в этом концептуально? –

+0

Да, я понятия не имею, с чего начать действительно .. – gorelative

Смежные вопросы