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);
}

phpcms二次开发学习的更多相关文章

  1. Civil 3D API二次开发学习指南

    Civil 3D构建于AutoCAD 和 Map 3D之上,在学习Civil 3D API二次开发之前,您至少需要了解AutoCAD API的二次开发,你可以参考AutoCAD .NET API二次开 ...

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

    ------------------------------------------------------------------------------------- PHPCMS本身功能已经很完 ...

  3. phpcms二次开发笔记

    phpcms二次开发笔记 --soulsjie 以下载的全新的phpcms搭建一个新的站点为例,讲解如何利用phpcms进行二次开发 一.下载和安装phpcms http://www.phpcms.c ...

  4. PHPCMS二次开发教程(转)

    转自:http://www.cnblogs.com/semcoding/p/3347600.html PHPCMS V9 结构设计 根目录 |–api  结构文件目录 |–caches 缓存文件目录 ...

  5. PHPCMS二次开发教程

    PHPCMS V9 结构设计 根目录|–api  结构文件目录|–caches 缓存文件目录   |– configs 系统配置文件目录   |– caches_* 系统缓存目录|–phpcms  p ...

  6. PHPCMS 使用图示和PHPCMS二次开发教程(转)

    PHPCMS V9 核心文件说明 模块与控制器 模块: phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块.即url访问中的m. 访问content模块示 ...

  7. phpcms二次开发步骤

    文件目录结构 根目录 | – api 接口文件目录 | – caches 缓存文件目录 | – configs 系统配置文件目录 | – caches_* 系统缓存目录 | – phpcms phpc ...

  8. Phpcms·二次开发

    PHPCMS V9产品介绍 PHPCMS V9(简称V9)采用PHP5+MYSQL做为技术基础进行开发.V9采用OOP(面向对象)方式进行基础运行框架搭建.模块化开发方式做为功能开发形式.框架易于功能 ...

  9. spss C# 二次开发 学习笔记(三)——Spss .Net 开发

    Spss .Net 二次开发的学习过程暂停了一段时间,今天开始重启. 之前脑残的不得了,本想从网上下载一个Spss的安装包,然后安装学习.于是百度搜索Spss,在百度搜索框的列表中看到Spss17.S ...

随机推荐

  1. NOIp 0904 出题报告

    T1 huajitree 纯模拟,把S拆成二进制查一下有多少个1,然后把这个数和N*M求一下gcd,除一下输出就好了.说求期望值可能对新高一不太友好…. //huajitree //2016.8.22 ...

  2. 深入JVM-垃圾回收概念与算法

    一.认识垃圾回收 谈到垃圾回收(Garbage Collection,简称GC),GC中的垃圾,特指存在于内存中的.不会再被使用的对象.对于内存空间的管理来说,识别和清理垃圾对象是至关重要的. 二.常 ...

  3. wcf第1步

    添加System.ServiceModel 引用 Wcf 服务端 class Program { static void Main(string[] args) { ServiceHost host ...

  4. C#验证子网掩码的正确性

    1.       IP合法关于IP地址的合法性验证很简单,方法也很多,比如字符串分解.正则表达式等. 2.       子网掩码是否合法简单来讲,子网掩码就类似这样一串数字,前面一段是连续的1, 类似 ...

  5. Java多线程系列

    一.参考文献 1.:Java多线程系列目录 (一) 基础篇 01. Java多线程系列--“基础篇”01之 基本概念 02. Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式 03. ...

  6. LaTeX 页眉页脚的设置

    Latex中页眉页脚的设置 1. 首先要加页眉页脚的话,需要启动宏: 我通常用fancyhdr宏包来设置页眉和页脚. \usepackage{fancyhdr} 我们在 LaTeX 中先把 page ...

  7. JVM 小结

    1.jvm虚拟机的种类及特点 Sun Classic:解释和编译不能协调使用:使用基于句柄的对象查找. Exact VM:解释和编译能协调使用:采用准确式内存管理:可以知道内存中某个位置的数据是什么类 ...

  8. 【转】Delphi 关键字详解

    absolute //它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同. var Str: string[32]; StrLen: Byte absolute Str; //这个声明 ...

  9. centos 7.0 安装

    最小化安装的  主要查看硬盘使用时间 需要安装 smartmontools 这个 [root@localhost ~]# yum install -y smartmontools 已加载插件:fast ...

  10. Redis-cluster集群【第四篇】:redis-cluster集群配置

    Redis分片: 为什么要分片:随着Redis存储的数据越来越庞大,会导致Redis的性能越来越差! 目前分片的方法: 1.客户端分片 在应用层面分片,程序里指定什么数据存放在那个Redis  优势: ...