欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

[PC]PHPCMS二次开发指南(上)

程序员文章站 2024-02-10 09:37:40
...
-------------------------------------------------------------------------------------

PHPCMS本身功能已经很完善,自带的模块可用可不用,松耦合特性使其非常适合企业的二次开发。

PC的默认路由在 phpcms/caches/configs/route.php 中定义,为content模块下index控制器的init方法

一. PC所有模块都在module目录下,与数据表名字相同;

  module目录中文件就是控制器,控制器名与文件名相同;

  前台控制器如index.php无须继承任何类,用于前台操作;

  后台控制器一般需要继承admin模块的admin类,一旦继承admin就需要权限验证(也可以不继承)。

二. 总结开发后台模块的步骤:

  1. 后台访问扩展的模块:

    扩展 - 菜单管理 - 添加菜单 - 上级:作为一级菜单(模块名,文件名,方法名)

            添加子菜单 - 上级:某个一级菜单(填不存在的模块名,填不存在的文件名,填不存在的方法名)

    扩展模块后,需要在v9_module中注册模块!(相当于安装)

  

  2. 创建数据表:

create table v9_link(
    .........
)engine=myisam default charset='utf8';

  

  3. 建立后台的数据模型

php
defined('IN_PHPCMS') or exit('No permiss resources.'); pc_base::load_sys_class('model', '', 0); class link_model extends model { function __construct() { $this->db_config = pc_base::load_config('database'); $htis->db_setting = 'default'; $this->table_name = 'link'; parent::__construct(); } } /** * 几点注意: * 1. PC的数据模型基本是鸡肋,只是指定了数据库设置和对应的表名,非彻底的MVC,直接复制一份修改即可。 * 2. 此模型一般在控制器构造方法调用。
*/

  4. 建立后台控制器: 

php
    /**
     * 后台友情链接,完整CURD
     */
    defined('IN_PHPCMS') or exit('No permission resources.');

    pc_base::load_app_class('admin', 'admin', 0);

    class link extends admin {
        private $db, $admin_db;
        public $siteid;
        function __construct() {
            parent::__construct();
            $this->M = new_html_special_chars(getcache('link', 'commons'));
            $this->db = pc_base::load_model('link_model');
            $this->db2 = pc_base::load_model('type_model');
        }

        /**
         * 友情链接列表
         */
        public function init() {
            if($_GET['typeid'] != '') {
                $where = array('typeid'=>intval($_GET['typeid']), 'siteid'=>$this->get_siteid());
            } else {
                $where = array('siteid'=>$this->get_siteid());
            }
            $page = (isset($_GET['page']) && intval($_GET['page'])) ? intval($_GET['page']) : 1;
            $infos = $this->db->listinfo($where, $order = 'listorder DESC, linkid DESC', $page, $page = '9');
            $pages = $this->db->pages;
            $types = $this->db2->listinfo(array('module'=>ROUTE_M, 'siteid'=>$this->get_siteid()), $order = 'typeid DESC');
            $types = new_html_special_chars($types);
            $type_arr = array();
            foreach($types as $typeid=>$type) {
                $type_arr[$type['typeid']] = $type['name'];
            }
            $big_menu = array('javascript:window.top.art.dialog({id:\'add\',iframe:\'?m=link&c=link&a=add\', title:\''.L('link_add').'\', width:\'700\', height:\'450\'}, function(){var d = window.top.art.dialog({id:\'add\'}).data.iframe;var form = d.document.getElementById(\'dosubmit\');form.click();return false;}, function(){window.top.art.dialog({id:\'add\'}).close()});void(0);', L('link_add'));

            include $this->admin_tpl('link_list');
        }

        /* 判断标题重复和验证 */
           
        /* 添加分类时,验证分类名是否已存在 */

        /**
         * 添加友情链接
         */
        public function add() {
            if(isset($_POST['dosubmit'])) {
                $_POST['link']['addtime'] = SYS_TIME;
                $_POST['link']['siteid'] = $this->get_siteid();
                if(empty($_POST['link']['name'])) {
                    showmessage(L('sitename_noempey'), HTTP_REFERER);
                } else {
                    $_POST['link']['name'] = safe_replace($_POST['link']['name']);
                }
                if($_POST['link']['logo']) {
                    $_POST['link']['logo'] = safe_replace($_POST['link']['logo']);
                }
                $data = new_addslashes($_POST['link']);
                $linkid = $this->db->insert($data, true);
                if( ! $linked) {
                    return false;
                }
                $siteid = $this->get_siteid();
                //更新附件状态
                if(pc_base::load_config('system', 'attachment_stat') & $_POST['link']['logo']) {
                    $this->attachment_db = pc_base::load_model('attachment_model');
                    $this->attachment_db->api_update($_POST['link']['logo'], 'link-' . $linkid, 1);
                }
                showmessage(L('operation_success'), HTTP_REFERER, '', 'add');
            } else {
                $show_validator = $show_scroll = $show_header = true;
                pc_base::load_sys_class('form', '', 0);
                $siteid = $this->get_siteid();
                $types = $this->db2->get_types($siteid);
                include $this->admin_tpl('link_add');
            }    
        }

         /* 异步更新排序 */

         /* 手动更新排序 */

         /* 添加友情链接分类 */

         /* 删除分类 */

         /* 分类管理 */

         /**
          * 修改友情链接分类
          */
        public function edit_type() {
            if(isset($_POST['dosubmit'])) {
                $typeid = intval($_GET['typeid']);
                if($typeid return