Skip to main content
 首页 » 程序教程

phpcms v9二次开发实例教程

2015年12月12日47750

PHPCMS系统为我们提供众多的模块,但是它不是能满足所有人的需求,所以我们要对PHPCMS进行二次开发,当然在这之前你已经对PHPCMS系统有了一定的了解。对PHPCMS系统的二次开发无非就是为PHPCMS添加新的模块,对于PHPCMS V9系统来说,模块分为前台模块和后台模块,比如我们要做一个医院网站,网站必然要提供在线预约的模块,但是PHPCMS系统并没有这样的模块,那就需要我们自己添加。对于前台我们需要为用户提供一个预约的功能模块,而后台需要为管理员提供一个处理预约的模块。好的下面以此为例,简单地为大家介绍一下 PHPCMS系统模块添加。

1)前台模块添加

打开phpcms/modules/目录,我们可以看到很多的目录,这里的每一个目录代表的就是一个模块,例如content模块、search模块等。由此我们就知道建立一个新的模块就是新建一个目录。好的,我们就新建一个目录,命名为qiantai。依照其他的模块我们在新建目录qiantai下在新建几个目录,目录结构如下:

|-phpcms

    |-modules

        |-qiantai //新建立的模块

        |-classes //应用程序类文件,此模块中需要用到的类文件,当然其他的模块也可以调用这里的类文件。

        |-functions //函数目录

        |-templates //后台模板目录,因为我开发的是前台模块,这个目录基本上用不到

        |-index.php //这就是我们所说的控制器

index.php中写入如下代码:

<?php
defined('IN_PHPCMS') or exit('No permission resources.');
class index{
    public function init(){
        include template('yuyue','index');//这是PHPCMS系统的一个函数,是用来调用前台模板的,这里是调用你所选择的风格下yuyue目录下的index.html模板
    }
}

我们打开phpcms/templates/318php(前面课程我们自己建立的一套模板)/,在下面新建一个目录,以yuyue命名,然后再在yuyue目录下新建index.html文件,并写入一段测试代码。代码内容如“这是预约前台测试模板”。

然后输入网址:http://www.****.com/index.php?m=qiantai&c=index&a=init,查看结果,前台模板到此就做好了,当用户前台预约成功后,管理员需要在后台能够管理预约,那我们就必须在后台添加一个管理预约模块。

2)后台模块添加

后台模块的添加和前台类似,在phpcms/modules/下新建目录houtai,目录结构如下:

|-phpcms

    |-modules

        |-houtai //新建立的后台模块

        |-classes //应用程序类文件,此模块中需要用到的类文件,当然其他的模块也可以调用这里的类文件。

        |-functions //函数目录

        |-templates //后台模板目录,这里需要用到这个目录了。

        |-index.php //这就是我们所说的控制器

index.php中写入如下代码:

<?php
defined('IN_PHPCMS') or exit('No permission resources.');
pc_base::load_app_class('admin','admin',0);//加载admin模块中的admin类文件
    class index extends admin{//所有后台模块控制器都要继承admin类
        public function __construct(){//构造方法,虽然这里是空代码,但是一定要写上,否则会提出“此模块未安装……”。
    }
    public function init(){
    include $this->admin_tpl('yuyue_list');//父类admin中的一个方法,功能是调用后台模板,这里就是调用上面所说的后台模板目录下的yuyue_list.tpl.php模板文件。
    }
}

我打开phpcms/modules/houtai/templates/目录,新建一个模板文件yuyue_list.tpl.php(必须以.tpl.php结尾命名),写入测试代码如“这是后台预约列表模板”。

到此这个后台模块就写完了,输入网址:http://www.****.com/index.php?m=houtai&c=index& amp;a=init查看结果。有人就说了,我访问后台这样访问网址太麻烦,我们怎么才能从后台点击过去的呢?简单啊,我们可以在后台的扩展 》菜单管理中添加菜单就可以了。假如我新建一个预约管理的一级菜单,这个菜单就显示在与内容、扩展等同级的导航上,有了一级菜单我们必须在这个菜单下建立一个二级菜单,也就是页面左侧菜单中的一级菜单,有点乱是吧,自己试一下就知道怎么回事了,一级二级菜单建立好了,然后是建立三级菜单,这才是真正调用咱们后台这个模块的菜单。添加三级菜单如图:

20151126090939386.png

文件名:就是控制器名,这里是index。再添加一级二级菜单时没有必要纠结方法名,随便写就可以了,以为他们不连接网址,只执行js。建立好以后我看一下效果图:

20151126090939250.png

PHPCMS V9的二次开发就是这些东西,具体就是自己写代码去实现了。做phpcms-v9二次开发时,我们经常需要用到如下代码,所以有必须在这里注释说明一下。

defined('IN_PHPCMS') or exit('No permission resources.');  
//第一步:获取模型缓存路径  
define('CACHE_MODEL_PATH',CACHE_PATH.'caches_model'.DIRECTORY_SEPARATOR.'caches_data'.DIRECTORY_SEPARATOR);  
  
pc_base::load_app_func('util','content');  
class index {  
    private $db;  
    function __construct() {  
        //第二步:获取与数据库相关的配置信息,如:数据表前缀、数据库名、数据库用户名、数据库密码、数据库编码、数据库类型  
        $this->db = pc_base::load_model('content_model');  
  
        $this->_userid = param::get_cookie('_userid');  
        $this->_username = param::get_cookie('_username');  
        $this->_groupid = param::get_cookie('_groupid');  
    }  
    //首页  
    public function init() {  
        if(isset($_GET['siteid'])) {  
            $siteid = intval($_GET['siteid']);  
        } else {  
            $siteid = 1;//模型情况下siteid为1  
        }  
        $siteid = $GLOBALS['siteid'] = max($siteid,1);  
        define('SITEID', $siteid);  
        $_userid = $this->_userid;  
        $_username = $this->_username;  
        $_groupid = $this->_groupid;  
        //SEO  
        $SEO = seo($siteid);  
        $sitelist  = getcache('sitelist','commons');  
        $default_style = $sitelist[$siteid]['default_style'];  
        $CATEGORYS = getcache('category_content_'.$siteid,'commons');  
        include template('content','index',$default_style);  
    }  
    //内容页  
    public function show() {  
        $catid = intval($_GET['catid']);  
        $id = intval($_GET['id']);  
  
        if(!$catid || !$id) showmessage(L('information_does_not_exist'),'blank');  
        $_userid = $this->_userid;  
        $_username = $this->_username;  
        $_groupid = $this->_groupid;  
  
        $page = intval($_GET['page']);  
        $page = max($page,1);  
  
        $siteids = getcache('category_content','commons');//获取各栏目所对应的站点id  
  
        $siteid = $siteids[$catid];//获取当前栏目所对应的站点id  
  
        $CATEGORYS = getcache('category_content_'.$siteid,'commons');//获取当前站点下所有栏目的配置信息  
          
        if(!isset($CATEGORYS[$catid]) || $CATEGORYS[$catid]['type']!=0) showmessage(L('information_does_not_exist'),'blank');  
  
        $this->category = $CAT = $CATEGORYS[$catid];//获取当前站点下当前栏目的配置信息  
  
        $this->category_setting = $CAT['setting'] = string2array($this->category['setting']);  
  
        $siteid = $GLOBALS['siteid'] = $CAT['siteid'];//获取当前站点下当前栏目所对应的站点id值  
          
        $MODEL = getcache('model','commons');//获取各个模型的配置信息  
  
        $modelid = $CAT['modelid'];//获取当前站点下当前栏目所属的模型id,找到了模型,也就找到了要查询的模型表(数据表)  
  
        //设置模型表:通过缓存文件获取modelid,然后再通过模型modelid获取对应的模型表及对应的模型附表  
        $tablename = $this->db->table_name = $this->db->db_tablepre.$MODEL[$modelid]['tablename'];  
  
        //设置模型附表  
        $r = $this->db->get_one(array('id'=>$id));  
  
        if(!$r || $r['status'] != 99) showmessage(L('info_does_not_exists'),'blank');  
  
        //下面代码获取的是当前模型附表中数据  
        $this->db->table_name = $tablename.'_data';  
  
        //下面代码获取的是当前模型附表中数据  
        $r2 = $this->db->get_one(array('id'=>$id));  
  
        //将模型表数据和模型附表中数据合并在一起  
        $rs = $r2 ? array_merge($r,$r2) : $r;  
  
        //再次重新赋值,以数据库为准  
        $catid = $CATEGORYS[$r['catid']]['catid'];  
        $modelid = $CATEGORYS[$catid]['modelid'];  
          
        require_once CACHE_MODEL_PATH.'content_output.class.php';  
        $content_output = new content_output($modelid,$catid,$CATEGORYS);  
          
        //将查询出来的数据经模型处理函数处理后放入$data数据中  
        $data = $content_output->get($rs);  
  
        //注意:这行代码非常之重要,主要用来将数组中各个元素转化为变量,数据元素的键名为变量名,数据元素的值为变量值  
        extract($data);
评论列表暂无评论
发表评论