• 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);
        }
         
  • 相关阅读:
    待办
    安卓微信浏览器修改的代码总是不生效
    微信浏览器内核2
    微信浏览器内核
    随记
    三次握手最后一个ack没有收到怎么办?
    判断偶数:
    利用kubeadm工具安装Kubernetes1.15版本
    kubernetes安装Helm
    最大子列和(附加子列初始元素和末尾元素)
  • 原文地址:https://www.cnblogs.com/cblx/p/4326260.html
Copyright © 2020-2023  润新知