약간의 수정을 통해서 widget 파일의 경로를 지정할 수 있도록 하였다.
따라서 widgets 디렉토리 하위에 다시 디렉토리를 생성하여 widget 을 분류하여 사용할 수 있다.
 
class Widget
{
    function Widget() {
        $this--->_assign_libraries();
    }
      
    function run($name)
    {       
        $args = func_get_args();
          
        ///////////////////////////////////////////////////////////////////
        //
        //  @ 변경전
        //
        //  require_once APPPATH.'/controllers/widgets/'.$name.EXT;
        //
        //
        ///////////////////////////////////////////////////////////////////    
          
        ///////////////////////////////////////////////////////////////////
        //
        //  @ 변경후
          
            $require_path   =   str_replace("//", "/", APPPATH.$name.EXT);
          
          
            if( file_exists($require_path) == false )
            {
                echo "NoFile : ".$require_path;
            }// end if
          
            require_once $require_path;
          
            $arrTemp    =   explode("/", $name);
            $name       = $arrTemp[ count($arrTemp)-1 ];
  
  
        ///////////////////////////////////////////////////////////////////
  
        $name       = ucfirst($name);
          
        $widget = new $name();
        return call_user_func_array(array(&$widget, 'run'), array_slice($args, 1));
    }
      
    function render($view, $data = array()) {
        extract($data);
        include APPPATH.'/views/widgets/'.$view.EXT;
    }
  
    function load($object) {
        $this->$object =& load_class(ucfirst($object));
    }
  
    function _assign_libraries() {
        $ci =& get_instance();
        foreach (get_object_vars($ci) as $key => $object) {
            $this->$key =& $ci->$key;
        }
    }
}