Actualizaciones de CodeIgniter + App + App con personalizaciones de vista

Tengo una aplicación que usa HMVC y codeigniter. Toda la aplicación está en un repository git llamado MapIt-USA. Me encontré con un escenario donde implementé esta aplicación para un cliente xyz y querían que personalizara el layout de la vista frontal. Realicé las modificaciones, sin embargo, cuando configuro el controller back-end, la biblioteca, los parches / actualizaciones del model y envío estas actualizaciones al origen y desde el origen en el server, necesito una forma de evitar sobrescribir esos cambios en las vistas.

¿Algunas ideas?

Idea básica para sobrecargar vistas (o cualquier file, realmente):

  • Almacene vistas personalizadas en algún lugar donde las actualizaciones principales de la aplicación no las sobreescribirán. Déles el mismo nombre que los pnetworkingeterminados.
  • Modifique su cargador de templates para verificar primero el file personalizado, si no existe, utilice el pnetworkingeterminado. Si no tiene una solución personalizada para cargar templates, ahora es el momento de escribir una o ampliar la class de cargador de CI para adaptarse a este cambio.

Probablemente llegará el momento en que tenga la necesidad de sobrecargar o extender más que simples vistas: quizás files de configuration, ayudantes, files de idioma o incluso controlleres. Por lo tanto, es posible que desee comenzar a pensar sobre cómo lidiar con esto en el largo ploop. Puede imitar la forma en que funciona CI, buscando primero en el system/ para files, mientras permite que las application/ files se extiendan o sobrecarguen. Las personalizaciones, por supuesto, soportarían la carga de mantenerse compatibles.

Ejemplo corto con vistas:

 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); } } 

Uso en un método de controller:

 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" } 

Cómo lo haces realmente depende de ti, pero esa es la idea básica.