Skip to content

HMVC for DMZ Modular Separation

World Wide Web Server edited this page Jul 4, 2012 · 9 revisions

With this modification on DMZ class you will be able to use Modular Separation with DMZ

Topic for discusion: http://codeigniter.com/forums/viewthread/154350/

Tested on: [Modular Extensions - HMVC] 5.2.31 (http://codeigniter.com/wiki/Modular_Extensions_-_HMVC/) [DMZ] 1.7.1 (http://www.overzealous.com/dmz/pages/download.html)

[b]HMVC for DMZ Modular Separation 0.3[/b]

By now I only change the way DMZ load the classes with native php 5 autoloader

  1. Replace this: [code] public static function autoload($class) { // Don't attempt to autoload CI_ or MY_ prefixed classes if (in_array(substr($class, 0, 3), array('CI_', 'EE_', 'MY_'))) { return; }

     // Prepare class
     $class = strtolower($class);
    
     $CI =& get_instance();
    
     // Prepare path
     if (isset($CI->load->_ci_model_paths) && is_array($CI->load->_ci_model_paths))
     {
         // use CI loader's model path
         $paths = $CI->load->_ci_model_paths;
     }
     else
     {
         $paths = array(APPPATH);
     }
    
     foreach ($paths as $path)
     {
         // Prepare file
         $file = $path . 'models/' . $class . EXT;
    
         // Check if file exists, require_once if it does
         if (file_exists($file))
         {
             require_once($file);
             break;
         }
     }
    
     // if class not loaded, do a recursive search of model paths for the class
     if (! class_exists($class))
     {
         foreach($paths as $path)
         {
             $found = DataMapper::recursive_require_once($class, $path . 'models');
             if($found)
             {
                 break;
             }
         }
     }
    

    } [/code]

  2. For this: [code] public static function autoload($class) { // Don't attempt to autoload CI_ or MY_ prefixed classes if (in_array(substr($class, 0, 3), array('CI_', 'EE_', 'MY_'))) { return; }

     // Prepare class
     $class = strtolower($class);
    
     $CI =& get_instance();
    
     // Prepare path
     if (isset($CI->load->_ci_model_paths) && is_array($CI->load->_ci_model_paths))
     {
         // use CI loader's model path
         $paths = $CI->load->_ci_model_paths;
     }
     else
     {
         $paths = array(APPPATH);
     }
    
     foreach ($paths as $path)
     {
         // Prepare file
         $file = $path . 'models/' . $class . EXT;
    
         // Check if file exists, require_once if it does
         if (file_exists($file))
         {
             require_once($file);
             break;
         }else{
             $array = debug_backtrace();
             if(isset($array[1]['file']) ){
                 $modules = $array[1]['file'];
                 $modules = substr($modules, (strpos($modules, 'modules')+8));
                 
                 $separador = '';
                 if(strpos($modules, '\\') ){// Windows
                     $separador = strpos($modules, '\\');
                 }elseif(strpos($modules, '/') ){// Linux
                     $separador = strpos($modules, '/');
                 }
                 $module = strtolower(substr($modules, 0, $separador));
                 $file_module = $path . 'modules/' . $module . '/models/' . $class . EXT;
                 if (file_exists($file_module))
                 {
                     require_once($file_module);
                     break;
                 }
             }
         }
     }
    
     // if class not loaded, do a recursive search of model paths for the class
     if (! class_exists($class))
     {
         foreach($paths as $path)
         {
             $found = DataMapper::recursive_require_once($class, $path . 'models');
             if($found)
             {
                 break;
             }
             if(isset($module) ){
                 $found = DataMapper::recursive_require_once($class, $path . 'modules/' . $module . '/models');
                 if($found)
                 {
                     break;
                 }
             }
         }
     }
    

    } [/code]

For HTMLForm extesion find the default form template on view: Add this: (application\datamapper\htmlform.php) [code] $this->form_template = ($object->using_module) ? '../../../views/' . substr($this->form_template, 3) : $this->form_template; $this->row_template = ($object->using_module) ? '../../../views/' . substr($this->row_template, 3) : $this->row_template; [/code]

After: [code] function render_form($object, $fields, $url = '', $options = array(), $template = NULL, $row_template = NULL) { [/code]

text: Category:DMZ Extensions

Clone this wiki locally