• phpcms二次开发学习


    1、新建模块就是phpcms/modules/目录下面新建文件夹,文件夹名即为模块名。

    2、模块内 一般新建三个文件夹:classes(模块要使用的类放置在这个文件夹,通过pc_base::load_app_classes()函数加载使用 )///

                    functions(模块要使用的函数放置在这个文件夹,通过pc_base::load_app_func()函数加载使用)////

                    template(模块后台管理的模板文件,通过$this->admin_tpl()方法调用)///

              除此之外,经常还有install文件夹和uninstall文件夹。具体参照安装源码包。

    3、模块的实现机制。

      控制器:即模块内的一个php文件,这是个类文件,文件名和文件内定义的类名必须一致。

    当我们在浏览器输入index.php?m=模块名&c=控制器名&c=控制器内方法名    时候,首先找到模块文件夹,再找到控制器,然后调用控制器内的方法。

       控制器内方法一般有两类:(1)显示一些内容;(2)处理提交的内容;

             对于“显示一些内容”的方法,首先准备一些模板中需要使用的变量,然后使用include template('','')调用模板。最重要的是模板的调用,模板中需要的变量必须在控制器内的方法中定义。

      一般如下:

        public function list_type() {
            $siteid = SITEID;
              $type_id = trim(urldecode($_GET['type_id']));
            $type_id = intval($type_id);
              if($type_id==""){
                 $type_id ='0';
             }
               $setting = getcache('link', 'commons');
            $SEO = seo(SITEID, '', L('link'), '', '');
              include template('link', 'list_type');//这一句是模板调用,这一句上面的语句基本都是为这一句做准备
        } 

        对于“处理提交的内容”,一般结构是这样的:

        public function register() { 
             $siteid = SITEID;//定义下面所需变量
             if(isset($_POST['dosubmit'])){//如果提交按钮按下去了,执行下面的操作,一般就是插入数据库并显示插入成功
                 if($_POST['name']==""){
                     showmessage(L('sitename_noempty'),"?m=link&c=index&a=register&siteid=$siteid");
                 }
                 if($_POST['url']==""){
                     showmessage(L('siteurl_not_empty'),"?m=link&c=index&a=register&siteid=$siteid");
                 }
                 if(!in_array($_POST['linktype'],array('0','1'))){
                     $_POST['linktype'] = '0';
                 }
                 $link_db = pc_base::load_model(link_model);//加载数据模型
                 $_POST['logo'] =new_html_special_chars($_POST['logo']);
    
                $logo = safe_replace(strip_tags($_POST['logo']));
                $name = safe_replace(strip_tags($_POST['name']));
                $url = safe_replace(strip_tags($_POST['url'])); 
                 if($_POST['linktype']=='0'){
                     $sql = array('siteid'=>$siteid,'typeid'=>intval($_POST['typeid']),'linktype'=>intval($_POST['linktype']),'name'=>$name,'url'=>$url);
                 }else{
                     $sql = array('siteid'=>$siteid,'typeid'=>intval($_POST['typeid']),'linktype'=>intval($_POST['linktype']),'name'=>$name,'url'=>$url,'logo'=>$logo);
                 }
                 $link_db->insert($sql);//执行数据插入操作
                 showmessage(L('add_success'), "?m=link&c=index&siteid=$siteid");//显示插入成功
             } else {  //否则就显示页面,等待输入并提交
                  $setting = getcache('link', 'commons');
                $setting = $setting[$siteid];
                 if($setting['is_post']=='0'){
                     showmessage(L('suspend_application'), HTTP_REFERER);
                 }
                 $this->type = pc_base::load_model('type_model');
                 $types = $this->type->get_types($siteid);//获取站点下所有友情链接分类
                 pc_base::load_sys_class('form', '', 0);
                  $SEO = seo(SITEID, '', L('application_links'), '', '');
                   include template('link', 'register');
             }
        } 

    4、关于模板

    模板中使用的是标签技术,比如内容模块中,用来显示分类的标签如下:

    {pc:content action="lists" catid="15" num="8" order="id DESC" page=""}    

    那么,如果是我们自己定义的模块呢?应该是这个样子:

    {pc:模块名 action="动作函数" catid="15" num="8" order="id DESC" page=""}    

    模块名不用多说,就是刚才我们定义的文件夹名。那么动作函数是哪来的呢?它定义在模块名/classes目录下的“模块名_tag.class.php”中,同样,这个类文件内主类名也应该是“模块名_tag”,此中定义一个名为“动作函数”的方法。这个方法接收一个参数data,这是一个数组参数,数组的键名就是上面的action,catid,num,order,page等等(这些变量名是可以自己定义的),值就是“动作函数”,15,8,等。

    一个典型的格式如下:

        public function type_lists($data) {
                if (!in_array($data['listorder'], array('desc', 'asc'))) {
                        $data ['listorder'] = 'desc';
                    }
                 $sql = array('module'=>ROUTE_M,'siteid'=>$data['siteid']);
                 $r = $this->type_db->select($sql, '*', $data['limit'], 'listorder '.$data['listorder']);
                return new_html_special_chars($r);
        }
         
  • 相关阅读:
    记一次数据库查询超时的原因 Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. The statement has been terminated Felix
    RSA 算法流程 Felix
    linux shell 比较文件相同部分comm命令和不同部分diff命令 按行读取 文件
    jekins vue 发布脚本 shell
    android 自动化测试参考资料(待验证)
    centos7 redis安装
    技术比赛之转件存储设计
    YD设计架构
    LS项目相关图形
    关于公司开放平台的初期计划
  • 原文地址:https://www.cnblogs.com/cblx/p/4326260.html
Copyright © 2020-2023  润新知