您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
PHPCMS二次开发方法指南
寻真2025-05-19phpcms教程已有人查阅
导读PHPCMS本身功能已经很完善,自带的模块可用可不用,松耦合特性使其非常适合企业的二次开发。PC的默认路由在phpcms/caches/configs/route.php中定义
PHPCMS本身功能已经很完善,自带的模块可用可不用,松耦合特性使其非常适合企业的二次开发。
PC的默认路由在phpcms/caches/configs/route.php中定义,为content模块下index控制器的init方法
一.PC所有模块都在module目录下,与数据表名字相同;
module目录中文件就是控制器,控制器名与文件名相同;
前台控制器如index.php无须继承任何类,用于前台操作;
后台控制器一般需要继承admin模块的admin类,一旦继承admin就需要权限验证(也可以不继承)。
二.总结开发后台模块的步骤:
1.后台访问扩展的模块:
扩展-菜单管理-添加菜单-上级:作为一级菜单(模块名,文件名,方法名)
添加子菜单-上级:某个一级菜单(填不存在的模块名,填不存在的文件名,填不存在的方法名)
扩展模块后,需要在v9_module中注册模块,插入此数据!(也即安装)
2.创建数据表:
后台模板文件都在modules/link/templates下,文件名统一以“.tpl.php”结尾
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. 此模型一般在控制器构造方法调用。
* 3. load_sys_class第三个参数为是否初始化,0表示只引入系统类,返回真假;1表示返回指定系统类的实例对象
* <Farwish.com>
*/
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 < 1) return false;
if( ! is_array($_POST['type']) || empty($_POST['type'])) return false;
if((!$_POST['type']['name']) || empty($_POST['type']['name'])) return false;
$this->db2->update($_POST['type'], array('typeid'=>$typeid));
showmessage(L('operation_success'),'?m=link&c=link&a=list_type','', 'edit');
} else {
$show_validator = $show_scroll = $show_header = true;
//查询分类内容
$info = $this->db2->get_one(array('typeid'=>$_GET['typeid']));
if( ! $info) {
showmessage(L('linktype_exit'));
extract($info);
include $this->admin_tpl('link_type_edit');
}
}
}
/**
* 删除友情链接
*/
public function delete() {
if( ! isset($_GET['linkid']) || (empty($_GET['linkid']) && ! isset($_POST['linkid'])) || empty($_POST['linkid'])) {
showmessage(L('illegal_parameters'), HTTP_REFERER);
} else {
if(is_array($_POST['linkid'])) {
foreach($_POST['linkid'] as $linkid_arr) {
//批量删除友情链接
$this->db->delete(array('linkid'=>$linkid_arr));
//更新附件状态
if(pc_base::load_config('system', 'attachment_stat')) {
$this->attachment_db = pc_base::load_model('attachment_model');
$this->attachment_db->api_delete('link - '. $linkid_arr);
}
}
showmessage(L('operation_success', '?m=link&c=link'));
} else {
$linkid = intval($_GET['linkid']);
if($linkid < 1) {
return false;
}
//删除友情链接
$result = $this->db->delete(array('linkid'=>$linkid));
//更新附件状态if(pc_base::load_config('system','attachment_stat')) {
$this->attachment_db = pc_base::load_model('attachment_model');
$this->attachment_db->api_delete('link-'.$linkid);
}
if($result){
showmessage(L('operation_success'),'?m=link&c=link');
}else {
showmessage(L("operation_failure"),'?m=link&c=link');
}
}
showmessage(L('operation_success'), HTTP_REFERER);
}
}
}
/**
* 几点注意:
* 1. 作为一款产品,你可以感受到它程序的严谨性,照着做。
* 2. 操作数据类和其它系统类均在 libs/classes/ 中,数据模型基类model.class.php通过数据库工厂类作为抽象层调用操作数据库的方法。
* 3. 查询所有为listinfo, 单条信息为get_one, 增加为insert, 修改为update。
* 4. 提示消息为系统公共函数showmessage(),在 libs/functions/global.func.php 中。
* 5. L()方法为语言处理函数,将读入语言包,根据后台配置显示英文/中文, 同样是系统公共函数,
* 6. 加载后台模板 include $this->admin_tpl(""); 这是admin模块下admin.class.php类的方法
* <Farwish.com>
*/
5.建立后台模板文件后台模板文件都在modules/link/templates下,文件名统一以“.tpl.php”结尾
/**
* 后台模板局部
*/
<?php
defined('IN_ADMIN') or exit('No Permission resources.');
$show_dialog = 1;
include $this->admin_tpl('header', 'admin');
?>
<table width="100%" cellspacing="0" class="search-form">
<tbody>
<tr>
<td><div class="explain-col">
<?php echo L('all_linktype')?>:<a href="?m=link&c=link"><?php echo L('all')?></a>
<a href="?m=link&c=link&typeid=0">默认分类</a>
<?php
if(is_array($type_arr)){
foreach($type_arr as $typeid => $type){
?><a href="?m=link&c=link&typeid=<?php echo $typeid;?>"><?php echo $type;?></a>
<?php }}?>
</div>
</td>
</tr>
</tbody>
</table>
/**
* 几点注意:
* 1. 后台模板是混编风格,由于在后台控制器中总是之后调用模板,所以系统库和函数以及变量总是可用的。
* 2. 模板底部可以写一些自己的JS操作函数。
* 3. pc的安全性体现url参数中的pc_hash值验证,我们在做一些修改显示页面时也必须在链接上带上这个加密的session值。
* <Farwish.com>
*/
PHPCMS的模块化设计非常人性化,更多有趣的地方等待大伙儿去发现
本文标签:
很赞哦! ()
下一篇:phpcmsv9模板制作方法教程
相关教程
图文教程
phpcmsv9验证码不显示的解决方法
最近有朋友遇到网站迁移后管理后台登陆验证码不显示的问题,今天在这里总结下Phpcms V9管理后台登陆验证码不显示的解决方法,希望对学习phpcms的朋友有点用处。
phpcms头部代码详细分析介绍
首先说明一下网站模板主要放在根目录\phpcms\templates\default下,各文件夹按功能放置相应模板,content文件夹下主要放置全站的页头、页尾等模板另一个要说明一下的就是标签
phpcms的get sql不输出结果的解决方法
phpcms get sql不输出结果怎么办?PHPcms v9 get标签sql 语句limit无效问题的解决方法get标签非常好用,自定义模型后get几乎变成 的了。但是PHPCMS升级到V9后,把2008的很多功能都去掉了
phpcms进入后台报错的解决方法
phpcms进入后台报错的解决办法:首先找到并打开“/caches/configs/system.php”文件;然后将“'session_storage' => 'mysql'”中的mysql改成files即可。
相关源码
-
(PC+WAP)蓝色弹簧针厂家探针充电连接器设备网站源码下载基于PbootCMS开发的响应式模板,为弹簧针、探针连接器等电子元器件企业设计。模板采用工业蓝主色调,突出产品技术特性,支持多维度展示连接器产品的规格参数与应用场景,帮助制造企业建立专业线上展示平台。查看源码 -
(自适应)餐具英文外贸生活用品带下载功能网站模板免费下载为餐具及生活用品外贸企业打造的响应式网站模板,基于PbootCMS内核开发。突出产品展示与多语言支持特性,通过自适应设计确保更好客户在手机、平板、电脑等设备上获得一致浏览体验。查看源码 -
(PC+WAP)房屋建造建筑工程房地产建材行pbootcms网站模板下载本模板基于PbootCMS内核开发,为房屋建造、建筑工程及房地产建材类企业设计。通过本模板可快速搭建具有行业特色的企业官网,只需替换文字与图片内容即可适配其他行业使用。查看源码 -
(自适应响应式)水墨风白酒酿制酒业酒文化酒类产品网站源码下载本模板基于PbootCMS内核开发,为酒类企业打造的水墨风响应式网站解决方案。采用传统东方美学设计语言,呈现白酒文化底蕴,自适应移动端展示效果,数据实时同步更新,助力酒企建立专业数字化形象。查看源码 -
(自适应HTML5)响应式智能设备人工智能机器pbootcms源码免费下载这款基于PbootCMS开发的网站模板为人工智能和智能设备行业设计,采用现代化科技风格,突出产品的智能特性和技术创新。模板架构合理,功能完善,能够有效展示各类智能产品的核心功能和解决方案。查看源码 -
帝国cms7.5自适应手机端在线课程教育网站源码基于帝国CMS后台管理系统,支持在线修改支付参数、联系方式等配置信息,操作界面直观便捷。专注于在线教育视频领域,提供完整的视频课程展示、付费购买及在线支付解决方案。支持多种支付渠道,满足教育培训机构的运营需求。查看源码
| 分享笔记 (共有 篇笔记) |
