site_controller控制器基类

功能描述

前台控制器专用基类

应用场景

前台控制器

继承关系


使用方法

函数接口

常用函数

gen_url

拼接有效的URL地址

参数
    array   $params

返回
    URL地址
<?php
    
...
    
$this->gen_url(array('app'=>$app_id'ctl'=>$ctl,'act'=>$act,'args'=>array(($tmp time())))),
    ...

page

对view下html页面进行编译,设置头部信息,并把生成的html。此生成的时候全页页面的main区域的html

供site_router下的dispatch方法构成全页页面使用

参数
    string  $view

返回
   string
<?php
    
...
    
$this->page('site/member/main.html');
    ...

redirect

直接跳转到指定地址

参数
    array   $url
    boolean $js_jump

返回
   null
<?php
    
...
    
$this->redirect(array('app'=>'b2c','ctl'=>'site_cart','act'=>'loginbuy','arg0'=>'1'));
    ...

begin end end_only

begin end 或者 begin end_only函数配合使用,可对运行程序的错误信息进行处理后在进行显示

begin 错误处理开始

end 显示处理结果,显示成功或失败页面

end_only 只显示错误信息

参数

splash

显示处理结果页面,可以用于状态提示跳转,如:是否已经登录的提示跳转

参数
    string  $status 'success' or 'failed'
    string  $jumpto 跳转的URL
    strint  $msg    显示的提示信息

返回
   null

注意: $jumpto参数中有两个特殊参数
       1)当$jumpto='back'时,跳转的是返回的页面
       2)当$jumpto='close'时,则不进行跳转,关闭本页面
<?php
    
...
    
$url $this->gen_url(array('app'=>'b2c','ctl'=>"site_member",'act'=>"setting"));
    
$this->splash('failed',$url app::get('b2c')->_('邮件已经存在'));
    ...

其他函数

extract_widgets_css

提取html页面中的css样式

public function extract_widgets_css(&$body)

参数
    string  $body(html)

返回
    string

create_widgets_key_prefix

生成widgets特有的前缀信息(用于缓存)

public function create_widgets_key_prefix($values, $varys)

参数
    string  $values
    string  $varys  widgets中widgets.php定义的$stting[varys]的信息

返回
   string

set_tmpl

设置主题模版类型,设置调用的模板页面,如果没有设置系统默认的调用模板的default.html

当在theme中添加了一个自定义的模板页面,则要使用此页面的时候,需要在page方法的前面

用此方法定义好。

final public function set_tmpl($tmpl)

参数
    string  $tmpl   模板页面的名字(index,default)

返回
    null

get_tmpl

读取主题模版类型,获取set_tmpl设置的值,此方法一般用不到,是系统自己调用的方法

final public function get_tmpl()

set_tmpl_file

设置主题模板文件,设置页面调用的模板,不同模板样式不同(模板中的html页面:page-help.html)

如果定义的模板文件不是在theme的时候则需要用set_tmpl_file来设置页面调用的模板

final public function set_tmpl_file($tmpl_file)

参数
    string  $tmpl_file  模板中的页面文件(page-help.html)

返回
    null

get_tmpl_file

读取主题模板文件,获取set_tmpl_file定义的值,此一般是在page方法中调用了,所以一般用page来显示页面就可以了

final public function get_tmpl_file()

set_max_age

设置头部max-age信息,提共给page方法或其他显示页面使用

Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不会去服务器)

参数  int  $time设置超时时间

set_no_cache

设置Cache-control:no_cache

参数    var boolean $status

set_no_store

设置Cache-control:no_store

当header设置为Cache-control:no_cache,no_store是,系统则不会对此页面进行缓存

参数    var boolean $status

set_cache_access

设置Cache-control:public(rivate)

参数    默认为pulbic

site_controoler提供的service box

site_controller_content

修改(替换,添加,删除)html页面的内容,修改的是对应的页面的html内容

  • 使用方法

    service注册的ID为site_controller_content

    <service id="site_controller_content">
        <class>ecbook_service_modifyhtml</class>
    </service>
    
    ecbook_service_modifyhtml类的写法
    <?php
    class ecbook_service_modifyhtml implements site_interface_controller_content{

        public function 
    modify(&$html, &$obj){
            
    //$html为此页面的所有的html,在此可以做完修改后进行返回就好
            
    $arr ='xxxxxx';
            
    $arr2.='xxxxx';
            
    $html str_replace($arr$arr2,$html);
        }
    }

site_controller_content.%s.%s.%s

修改(替换,添加,删除)html页面的内容,修改的是指定的app的控制器的方法的页面的html内容

因为这个service是在site_controller的构造方法里面的,因此,这个service一般是在修改系统共用的一些内容

  • 使用方法

    其用法和site_controller_content这个service一样,service注册类的写法所一样的,需要注意的是service ID 的写法site_controller_content.$app_name.$ctl.$act

    第一个%s表示的此页面所在的app的app名字
    第二个%s表示的此页面所在的调用控制器的名字
    第三个%s表示的此页面所在的调用方法的名字
    
    service类的写法
    modify方法:和site_controller_content service类的写法一样
    boot方法:一般修改的是前台系统共用的一些配置信息,最后返回true
    

site_controller_display.%s.%s.%s

此service用于前台的页面劫持

使用场景:如果在一个前台控制器中使用了site_controller中page方法调用view下的html页面,

那么在需要劫持此方法中的的页面则可以使用此service

  • 使用方法

    注册srevice

    第一个%s表示的此页面所在的app的app名字
    第二个%s表示的此页面所在的调用控制器的名字
    第三个%s表示的此页面所在的调用方法的名字
    
    <service id="site_controller_display.b2c.site_gallery.index">
        <class>shangchao_ctl_site_gallery</class>
    </service>
    
    service类的写法
    get_view方法:返回劫持后的页面
    get_app_id方法: 提供劫持后的页面所在的app的名字
    
    <?php
    class shangchao_ctl_site_gallery extends site_controller{
        function 
    get_view(){
            
    //$GLOBALS['runtime']['serach_content'] = $_GET['scontent'].'__'.$this->pagedata['args'][5];
            //提供劫持页面的数据
            
    return 'site/gallery/index.html';//返回劫持的页面
        
    }

        function 
    get_app_id(){
            return 
    'shangchao';
        }
    }
    ?>