ecstore后台学习笔记(1)

2015年10月16日 | 5569

1,base_render -> base_controller -> desktop_controller

2redirect (直接跳转到指定地址)

$this->redirect(array('app'=>'desktop','ctl'=>'admin_default','act'=>'index'));
3、location_to()

跳转到当前页面

4finder 显示后台列表函数

5url_frame 后台的列表区域自定义iframe

function index(){
   $this->url_frame('www.baidu.com');
}


6、singlepage (注意:文件编码格式必须对,如网站文件编码和字符编码都是utf-8的,任一决不能是其它编码格式,否则会无法显示,经验教训)

显示页面,默认配合target=_blank使用时,显示的页面不包含框架的其他页面,只是本身页面,如产品添加编辑页面

'href'=>'index.php?app=b2c&ctl=admin_goods_editor&act=add',
'target'=>'_blank'),
...
$this->singlepage('admin/goods/detail/frame.html');
7、page(注意:文件编码格式必须对,如网站文件编码和字符编码都是utf-8的,任一决不能是其它编码格式,否则会无法显示,经验教训)


显示页面,如果page配合target=_blank使用时,显示的页面包含在框架里面,显示在后台的自定义列表中

如果是page配合target=dialog使用时,则显示的是弹出层页面(display配合target=dialog使用时也有同样的效果)

如产品列表

'href'=>'index.php?app=b2c&ctl=admin_goods_editor&act=add',
'target'=>'_blank'),
...
$this->page('admin/goods/detail/frame.html');

如会员添加页面
'href'=>'index.php?app=b2c&ctl=admin_member&act=add_page','target'=>'dialog::{title:\''.
app::get('b2c')->_('添加会员').'\',width:460,height:460}'),
...
$this->page('admin/member/new.html');

7.2、display
$this->display();//打开整个新页面

8、splash
信息提示,ajax输出,begin end方法信息输出调用此方法
function splash($status='success',$url=null,$msg=null,$method='redirect',$params=array())
参数
    string  $status=error是输出错误信息,默认输出正确提示信息
    string  $url自定义拼接的URL,一般为空
    string  $msg要输出的信息
    string  $method
    array   $params当参数为array('splash'=>'1') 时,则表示只是输出自定义信息
例1
//输出正确信息
$this->splash('success','','正确信息');
//输出错误信息
$this->splash('error','','错误信息','redirect',array('splash'=>'1'));


9、jumpTo

跳转到当前app的,控制器中的某个方法中进行运行

function jumpTo($act='index',$ctl=null,$args=null){
参数
    string  $act控制器中的方法名
    string  $ctl控制器名
    array   $args参数


10、has_permission

判断当前用户的权限

 

11display

displaybase_render中的display方法一样

display配合target=dialog使用时,显示的页面为弹出层

'href'=>'index.php?app=b2c&ctl=admin_member&act=add_page','target'=>'dialog::{title:\''.
app::get('b2c')->_('添加会员').'\',width:460,height:460}'),
...
$this->display('admin/member/new.html');


12pre_display

和base_render中的pre_display方法一样,只是注册的service是不一样的.

这个service是desktop_render_pre_display

 

13desktop_controller提供的service

app_pre_auth_use 登录之前的预先验证

desktop_controller_content.%s.%s.%s

desktop_controller_content_finderdetail.%s.%s.%s.%s

desktop_controller_destruct

desktop_controller_display.%s.%s.%s

tpl_source

desktop_render_pre_display

 

14、对某个字段进行重写要在model层中实现

/**

 * content 模板

 */

 class myapp_mdl_content extends dbeav_model{

    public function __construct($app){

        parent::__construct($app);

    }

   

    /*对某个字段重写用modifier_+字段 */

    public function modifier_brand_name($row){

        //echo $row;exit;

        return $row;

    }

 }

 

15.必须注意:弄好后记得 cmd update

desktop图例

  • 一个典型的desktop的列表页包含了哪些内容,如下图所示:

q.png

接下来我们看各个区里的内容是如何增删及展示出来的

  • 123区】都是根据app下的desktop.xml产生,如何填充,可以参照desktop.xml的介绍试试看

  • 5区】顶部菜单产生是靠往服务iddesktop_menu里注册服务实现

在service.xml里添加

     
        b2c_service_view_menu
    


b2c_service_view_menu内容如下

class b2c_service_view_menu{
    function function_menu(){
        $shop_base = app::get('site')->router()->gen_url(array('app'=>'site', 'ctl'=>'default'));
        $html[] = "浏览商店";
        return $html;

    }
}


说明:desktop_menu的服务,必须定义名字为function_menu的方法,它的返回值即为【5区】的菜单项

4finder详细解释

q.png

finder说明:

  • 下面对finder各个区的内容的来龙去脉做解释:

·             我们平时做任何web应用大概都少不了后台管理功能,
·             这之中最常看到的大概就是:数据列表,对数据进行单条查看,删除,搜索列表数据。
·             finder就是做这样工作的,要做到这些事情只需简单的给一个方法传几个参数而已。


例如:

    function index(){
        $this->finder('b2c_mdl_goods',array(
        'title'=>app::get('b2c')->_('商品列表'),
        'actions'=>array(array('label'=>app::get('b2c')->_('添加商品'),
              'href'=>'index.php?app=b2c&ctl=admin_goods_editor&act=add','target'=>'_blank'),),
        'use_buildin_set_tag'=>true,
        'use_buildin_filter'=>true,
        'use_buildin_export'=>true,
        'allow_detail_popup'=>true,
        'use_view_tab'=>true,
        'base_filter'=>array('order_refer'=>'local','disabled'=>'false'), //对tab数据进行过滤筛选
        'finder_aliasname'=>'xxxx',
            ));
    }


后台的控制器必须继承desktop_controller,继承后才有finder方法,下面介绍下finder方法的几个参数:

    • 第一个参数是字符串,(上例中是b2c_mdl_goods),是model里的class名,它决定了finder列表的数据源,默认情况下是b2c_mdl_goods类里的getlist方法返回的数据

    • 第二个参数是数组,这个数组内涵相当丰富,解释如下:

        title: 【图 finder】中的【1区】显示出来的内容

        actions: 【图 finder】【2区】里的内容除了显示内置的操作以外(use_buildin_set_tag,use_buildin_filter这些是控制项),还可以自定义添加新操作,参照上面格式。

        allow_detail_popup: allow_detail_popup和其下面的其他项,是上面所说的内置的操作的控制项,其值为true时,显示此内置项。完整的内置操作及含义如下(可到            desktop_finder_builder_view类里查看):

        use_buildin_new_dialog: 是否显示新建操作

        use_buildin_set_tag: 是否显示设置标签操作

        use_buildin_recycle: 是否显示删除操作

        use_buildin_export: 是否显示导出操作

        use_buildin_import: 是否显示导入操作

        use_buildin_tagedit: 是否显示标签管理操作

        base_filter: 对tab数据进行过滤筛选,参照上面格式

        top_extra_view 在finder列表头部增加其他自定义html显示,如top_extra_view=>array('app名称'=>'页面路径');

  • 下面几个控制项是控制【图      finder】【2区】里的内容

        use_view_tab: 是否显示finder中的tab(如果有),有无需看控制器中是否有_views方法。

        use_buildin_filter: 是否使用高级筛选 【图 finder】【6区】

        use_buildin_refresh: 是否显示刷新操作(高级筛选旁)

        use_buildin_setcol: 是否显示列配置

        use_buildin_selectrow: 是否显示每条记录前的复选按钮

        allow_detail_popup: 是否显示查看列中的弹出查看图标(【图 finder.png】4区第二个图标)

        finder_aliasname: 此finder的别名,用于保存此finder的

下面对几个重点区域内容的填充做详细讲解

增加finder列表的自定义列

  • finder列表的列分为以下三种:

    1. 查看列 (分为下列查看和弹出查看)

    2. 自定义列(也可称函数列),可以通过一种方法扩展

    3. 普通列(数据表里有的字段,也即dbschema里有的字段)

    • 【图 finder】【5区】的两列操作和标签都不是dbschema里的字段,还能显示出来是因为他们是自定义列.

    • 通过下面的步骤实现:

    1. 注册一个service,其iddesktop_finder.xxx,xxxfinder方法的第一个参数.

    2. 上例中是b2c_mdl_goods,最终结果在相应的应用中services.xml中如下样子:

    
        b2c_finder_goods
    


b2c_finder_goods类里有两种方法,两种属性,属性和方法成对出现:


  • 第一种 属性以detail_开头,对应的方法也以detail_开头 例如:

·             var $detail_basic = '基本信息';
·             function detail_basic($gid){
·                 ...
·                 return $str;
·             }
·         属性detail_basic是作为列头显示的,
·         方法detail_basic的返回值是点击查看里出现的内容
·         [如果有多个detail_开头的方法,则显示第一个里面的内容]


  • 第二种:属性以column_开头,对应的方法也以column_开头

    var $column_editbutton = '操作';
    public function column_editbutton($row)
    {
        ...
        return $str;
    }
属性column_editbutton是作为列头显示的,
方法column_editbutton的返回值是每行此列的显示内容,
方法column_editbutton的参数是当前行的数组。


finder自定义列初始化宽度

  • finder自定义列中设置

 ...
        var $column_try = '测试';
        var $column_try_width = 100;
        public function column_try($row)
        {
               return '====';
        }
 ...


效果如图:
5GTZQ8IT)]T)TF09V03N$QX.png

16$this->path[] = array('text'=>app::get('myapp')->_('商品品牌编辑'));

     $objContent = $this->app->model('contents');

     

     $this->pagedata['brandInfo'] = $objContent->dump($b_id);

    记得dump是打印该app下面的模型数据表字段