在ECOS后台中内置了导入导出的功能
在系统中默认的导入导出的文件格式是.csv。如果需要扩增别的导出格式这可注册service进行
扩增,service的id为desktop_io
<service id="desktop_io">
    <class>desktop_io_type_csv</class>
</service>
在ECOS系统中默认的内置的导出的是根据finder中的定义的model将数据库中的数据导出来。它导出的数据并不是finder中所看到的数据
ECOS中对导出的处理
/** end **/
if( method_exists($model,'fgetlist_'.$_POST['_io_type']) ){
    /** 导出头部 **/
    $oImportType->export_header( $data,$model,$_POST['_export_type'] );
    while( $listFlag = $model->fgetlist_.'$_POST['_io_type']'($data,$_POST,$offset,$_POST['_export_type']) ){
        $offset++;
    }
    $oImportType->export( $data,$offset,$model,$_POST['_export_type'] );
}else{
    /** 导出头部 **/
    $oImportType->export_header( $data,$model,$_POST['_export_type'] );
    while( $listFlag = $oImportType->fgetlist($data,$model,$_POST,$offset,$_POST['_export_type']) ){
        $offset++;
        $oImportType->export( $data,$offset,$model,$_POST['_export_type'] );
    }
}
在对应的model下面定义export_header方法可以定义导出的header,
可以参照系统默认的导出header,
function export_header(&$data,&$model,$exportType=1){
    header("Content-Type: text/csv"); //定义csv格式
    $filename = $data['name'].".csv"; //定义导出的名字
    $encoded_filename = urlencode($filename);
    $encoded_filename = str_replace("+", "%20", $encoded_filename);
    $ua = $_SERVER["HTTP_USER_AGENT"];
    if (preg_match("/MSIE/", $ua)) {
        header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
    } else if (preg_match("/Firefox/", $ua)) {
    header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');
    } else {
        header('Content-Disposition: attachment; filename="' . $filename . '"');
    }
    //header("Content-Disposition: attachment; filename=".$data['name'].'.csv');
    header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
    header('Expires:0');
    header('Pragma:public');
}
根据导出的类型,在对应的model中定义fgetlist_csv(默认的是fgetlist_csv,名字是根据导出的类型来定义的 fgetlist_.$_POST['_io_type'])。
来自己组织数据进行导出
function fgetlist_csv(&$data,$filter,$offset,$exportType=1){
    //$filter finder中每条记录的主键ID对应的值 $filter = array('ID'=>array('0'=>1));
    //因为所有导出的数据都是先放在内存中,在将数据导出。因此可以先把内存放大
    /** 适当放大内存到512M **/
    if ($offset == 0){
        @ini_set('memory_limit','512M');
    }
    /** end **/
    //需要导出的数据是放在$data中的 $data['title'] 存放导出的头部标题  数据$data['contents']--内容
    return true;
}
在ECOS中导入使用了队列,导入默认只支持.csv格式的文件。另外导入需要在对应的model中自己解析数据,返回filter条件的格式
首先根据 prepared_import_csv_row 方法进行数据解析,这里接受到数据$row是导入地csv文件中一行一行的抛过来的
function prepared_import_csv_row($row,$title,&$Tmpl,&$mark,&$newObjFlag,&$msg){
        if( substr($row[0],0,2) == 'ID' ){//判断是否是标题
            $mark = 'title';  //定义这是标题信息
            $newObjFlag = true;
            foreach($row as $k=>$v){
               $pnt2 = "/\((.+?)\)/";
               if(preg_match($pnt2,$v,$match)){
                  $row[$k] =  $match[1];
               }
            }
            /*
            返回的title数据
             Array
            (
                [user_id] => 0
                [user_name] => 1
                [user_info] => 2
                [user_time] => 3
                [user_email] => 4
            )
              */
            return array_flip($row);
        }else{
            $mark = 'contents'; //定义这是数据内容
            $newObjFlag = true;
            /*
             返回的数据格式
              Array
                (
                    [0] => 1
                    [1] => wuwei
                    [2] => wuei11
                    [3] =>
                    [4] => fasdf@q.c
                )
            */
            return $row;
        }
    }
prepared_import_csv_obj 方法,是根据解析过来的数据组成filter条件再返回出去,解析的数据也是一行一行的抛过来的
function prepared_import_csv_obj($data,&$mark,$Tmpl,&$msg = ''){
        if( !$data['contents'] )return null;
        $mark = 'contents';
        $key = $data['title'];
        $value = $data['contents'];
        foreach($key as $k=>$v){
            $return[$k] =  $value[0][$v];
        }
        /*
          返回$filter类型的数据
            Array
            (
                [user_id] => 1
                [user_name] => wuwei
                [user_info] => wuei11
                [user_time] =>
                [user_email] => fasdf@q.c
            )
         */
        return $return;
    }
在prepared_import_csv_row和prepared_import_csv_obj两个方法中,如果是直接断点输出则什么都不显示,如果要查看断点输出的值
1 可以在http header的响应中查看到所断点echo出来的值
2 可以使用error_log查看