首页 » Ecstore » Ecstore后台finder添加自定义字段不显示的BUG

Ecstore后台finder添加自定义字段不显示的BUG

6947 0

问题描述:Ecstore后台的finder添加自定义字段func_column后,如果当前finder进行过字段手动排序的话,则不会显示新添加的自定义字段。
问题原因:代码逻辑问题。
涉及文件:app/base/ego.php,app/base/ego/desktop/ego.php,app/desktop/lib/finder/builder/prototype.php。

具体代码逻辑过程:
先是看下finder的构成中column形成的函数。

function getColumns(){
        if(!$this->columns){
            $cols = $this->app->getConf('view.'.$this->object_name.'.'.$this->finder_aliasname.'.'.$this->controller->user->user_id);
            $cols = $cols ? $cols : $this->finder_cols;
            $func_columns = $this->func_columns();
            $all_cols = $this->all_columns();
            $this->columns = ecos_cactus('desktop','finder_get_columns',$cols, $func_columns, (array)$this->dbschema['default_in_list'], $all_cols);
        }
        return $this->columns;
    }

如果字段有手动排序过,那么这里$cols是直接去数据库里的值,如果没有,则是$this->finder_cols,而文件头部定义了public $finder_cols = ”;

再看ecos_cactus函数,调用了ecos_cactus_desktop_finder_get_columns。

function ecos_cactus(){
    $args = func_get_args();
    $app_name = $args[0];
    unset($args[0]);
    $func_name = 'ecos_cactus_'.$app_name.'_'.$args[1];
    unset($args[1]);

    require_once(ROOT_DIR.'/app/base/ego/'.$app_name.'/ego.php');

    $return = call_user_func_array($func_name,$args);

    return $return;
}

最后看ecos_cactus_desktop_finder_get_columns怎么处理:

function ecos_cactus_desktop_finder_get_columns($cols , $func_columns , $default_in_list , $all_cols)
{
    if($cols){
        return explode(',',$cols);
    }else{
        if($func_columns){
            foreach($func_columns as $key=>$func_column){
                $col_keys[count($col_keys)] = $key;
            }
        }
        $columns = array_merge((array)$col_keys,(array)$default_in_list);
        foreach($all_cols as $key=>$value){
            if(in_array($key,$columns)){
                $return[count($return)] = $key;
            }
        }
        return $return;
    }
}

很明显,这里当$cols不为空时,则直接返回数据库里的数据,所以你再怎么自定义字段也没个鸟用,下面的代码它根本不会执行。

文章评分2次,平均分4.0

本文原始地址:https://www.tiandiyoyo.com/2015/07/ecstore-bug-not-display-column-in-desktop/
本站所有文章,除了特别注明外,均为本站原创,转载请注明出处来自www.tiandiyoyo.com

您可能还会对以下文章感兴趣:

评论前先开启评论开关: