这篇文章主要为大家介绍了dedecms插件开发的方法,以实例形式对插件开发的步骤进行了详细的介绍,非常具有实用价值,需要的朋友可以参考下
 原文:http://www.jb51.net/cms/230548.html

本文简单讲述了dedecms插件开发的方法。分享给大家供大家参考。具体如下:

这里举的是一个很简单插件实例,通过此插件,你可以知道怎么样开发一个插件,它结构是怎么设置的,数据库,后台等。

文件结构如下:

enroll.php 文件在 plus文件下
enroll.htm文件在templets/plus 文件夹下
adenroll.php 文件在dede文件夹下
adenroll.html 文件dede/templet文件夹下

sql文件如下:

复制代码

代码如下:

CREATE TABLE IF NOT EXISTS `dede_enroll` (
`id` int(4) NOT NULL auto_increment,
`name` varchar(20) NOT NULL,
`mail` varchar(30) NOT NULL,
`tag` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

INSERT INTO `dede_plus` (`aid`, `plusname`, `menustring`, `mainurl`, `writer`, `isshow`, `filelist`) VALUES
(30, '网上报名', '<m:item name=''网上报名'' link=''adenroll.php'' rank=''plus_网上报名'' target=''main'' />', '', 'g1000', 1, '');

这里说明下 为了方便 我简单的设置了 两个字段 姓名和邮箱 tag字段是标示是否录取 1为录取
第一个insert语句是添加到后台管理
第二个insert语句是添加到前台导航栏

enroll.php文件如下:

复制代码

代码如下:

<?php 
//*******要先包含common.inc.php 然后 session_start(); 否则取不到session的值 
//*******因为common.inc.php 有关于session路径的配置 
include_once dirname(__FILE__).'./../include/common.inc.php';//包含配置文件 
session_start(); 
require_once DEDEINC."/arc.partview.class.php";//包含partiew类 
//*****实例化 这个类的作用是得到头部导航栏和尾部信息 若不需要可以使用dedetemplate.class.php 这个类 
$pv = new PartView(); 
if($_POST){ 
if( CheckEmail($_POST['mail'])==false){//验证邮箱 方法在common.func.php 公用函数 
ShowMsg('邮箱格式错误','-1'); 
exit(); 

if($_POST['name']==""){ 
ShowMsg('用户名不能为空','-1'); 
exit(); 
}else{ 
$name=htmlspecialchars($_POST['name']); 

if($_SESSION['dd_ckstr']!=strtolower($_POST['validation'])){//验证 验证码 必须转换成小写 
ShowMsg('验证码错误',-1); 
exit(); 

$sql="insert into `cms_enroll`(name,mail) values('$name','$_POST[mail]')"; 
//********$db可直接使用 系统自动实例化了dedesql.class.php 
$affected = $db->ExecuteNoneQuery2($sql);//执行一条语句 返回影响值 
if($affected){ 
ShowMsg('报名成功',-1); 

}else{ 
$pv->SetTemplet(DEDETEMPLATE.'/plus/enroll.htm');//设置模板 
$pv->Display();//显示页面 
}
?>

enroll.htm文件如下:

复制代码

代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>"> 
<head> 
<title>{dede:global.cfg_webname/}-在线报名</title> 
<link href="{dede:global.cfg_templeturl/}/style/dedecms.css" rel="stylesheet" media="screen" type="text/css" /> 
</script> 
</head> 
<body> 
{dede:include filename="../default/head.htm"/}<!-- 包含头部 --> 
<blockquote style="margin:50px auto" > 
<form method="post" action=""> 
姓 名:<input type="text" size=30 name="name" />

邮 箱:<input type="text" size=30 name="mail" />

<!--vdimgck.php 是验证码--> 
验证码:<input type="text" name="validation" /><img src="../../include/vdimgck.php" />

<input name="encoll" type="submit" value="报名" />

</form> 
</blockquote> 
{dede:include filename="../default/footer.htm"/}<!-- 包含尾部 --> 
</body> 
</html>

adenroll.php如下:

复制代码

代码如下:

<?php 
require_once(dirname(__FILE__).'/config.php');//后台配置文件 检查登陆 配置信息 
require_once(DEDEINC."/datalistcp.class.php");//包含分页类 
if($_GET['action']&&$_GET['id']){ 
if($_GET['action']=='pass'){//各种操作 
$db->ExecuteNoneQuery("update cms_enroll set `tag`=1 where id='$_GET[id]'"); 
ShowMsg('录取成功','adenroll.php'); 

if($_GET['action']=='nopass'){ 
$db->ExecuteNoneQuery("update cms_enroll set `tag`=0 where id='$_GET[id]'"); 
ShowMsg('取消录取','adenroll.php'); 

if($_GET['action']=='delete'){ 
$db->ExecuteNoneQuery("delete from cms_enroll where id='$_GET[id]'"); 
ShowMsg('删除成功','adenroll.php'); 

}else{ 
$dl = new DataListCP(); 
$dl->pageSize = 10;//每页显示10条 
$dl->SetTemplate('./templets/adenroll.htm');//载入模板 
$sql="select * from cms_enroll"; 
$dl->SetSource($sql);//执行sql 不能与$dl->SetTemplate 颠倒 
$dl->Display();//显示页面 
}
?>

adenroll.html文件如下:

复制代码

代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>"> 
<head> 
<title>在线报名管理</title> 
<link href='img/base.css' rel='stylesheet' type='text/css' /> 
<style type="text/css"> 
th,td{ 
text-align:center; 
border:1px #D1DDAA solid; 
font-size:15px; 

th{ 
background:#E6F8B7; 

table{ 
margin-top:20px; 

</style> 
</head> 
<body> 
<table width="90%" border="0" cellpadding="0" cellspacing="0" align="center"> 
<tr> 
<th>姓名</th> 
<th>E-mail</th> 
<th>状态</th> 
<th>操作</th> 
</tr> 
<!-- 循环得到结果 --> 
{dede:datalist} 
<tr> 
<td>{dede:field.name /}</td> 
<td>{dede:field.mail /}</td> 
<td> 
{dede:if field.tag==0} 
未录取 
{else} 
<font color="red">已录取</font> 
{/dede:if} 
</td> 
<td> <a href="adenroll.php?action=pass&id={dede:field.id /}">[录取]</a> 

<a href="adenroll.php?action=nopass&id={dede:field.id /}">[不通过]</a> 

<a href="adenroll.php?action=delete&id={dede:field.id /}">[删除]</a> 
</td> 
</tr> 
{/dede:datalist} 
</table> 
<!-- 分页标签 --> 
<p style="text-align:center;font-size:15px;">{dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5"/}</p> 
</body> 
</html>

希望本文所述对大家的dedecms二次开发有所帮助。

(转)dedecms插件开发简明教程的更多相关文章

  1. 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)

    小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...

  2. 2013 duilib入门简明教程 -- 部分bug (11)

     一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题,     1.最大化按钮的样式 ...

  3. 2013 duilib入门简明教程 -- 部分bug 2 (14)

        上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃            如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...

  4. 2013 duilib入门简明教程 -- 自绘控件 (15)

        在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如 ...

  5. 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)

        界面的显示方面就都讲完啦,下面来介绍下控件的响应.     前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEG ...

  6. 2013 duilib入门简明教程 -- FAQ (19)

        虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下.     需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImpl ...

  7. Mac安装Windows 10的简明教程

    每次在Mac上安装Windows都是一件非常痛苦的事情,曾经为了装Win8把整台Mac的硬盘数据都弄丢了,最后通过龟速系统恢复模式恢复了MacOSX(50M电信光纤下载了3天才把系统下载完),相信和我 ...

  8. Docker简明教程

    Docker简明教程 [编者的话]使用Docker来写代码更高效并能有效提升自己的技能.Docker能打包你的开发环境,消除包的依赖冲突,并通过集装箱式的应用来减少开发时间和学习时间. Docker作 ...

  9. 2013 duilib入门简明教程 -- 总结 (20)

        duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第个版本,时间是2013.08.15~       这里给出Alberl最后汇总的一个工程,戳我下载,效 ...

随机推荐

  1. bbc 大数据

    http://video.sina.com.cn/v/b/107900125-2192582404.html

  2. Automated Telephone Exchange

    Time Limit: 3000MS Memory limit: 65536K 题目描述In St Petersburg phone numbers are formatted as “XXX–XX– ...

  3. Qt tip 网络请求 QNetworkRequest QJason 处理 JSON

    http://blog.csdn.net/linbounconstraint/article/details/52399415 http://download.csdn.net/detail/linb ...

  4. 根据body的内容 查找h2标签的@class="subtitle"的值

    <pre name="code" class="html"><body class="api jquery listing" ...

  5. C++ Primer 随笔 Chapter 10 关联容器

    1.关联容器的类型:map(键-值对的集合,可理解为关联数组), set(单纯的键的集合), multimap(一个键对应多个值,键唯一), multiset(相同键可以是多个). 2.pair类型提 ...

  6. 【动态规划】Vijos P1121 马拦过河卒

    题目链接: https://vijos.org/p/1616 题目大意: 卒从(0,0)走到(n,m),只能向下或向右,不能被马一步碰到或走到马,有几种走法. 题目思路: [动态规划] 把马控制的地方 ...

  7. [Locked] Inorder Successor in BST

    Inorder Successor in BST Given a binary search tree and a node in it, find the in-order successor of ...

  8. JVM垃圾回收机制入门

    前言 数据库是大家会普遍重视的一个领域,异步通信一般用不到,虚拟机在大部分时候不会出问题,常被人忽视,所以我打算先学习虚拟机,从零单排Java高性能问题. 堆内存存储结构 Java6是以年代来规划内存 ...

  9. 「书评」SAP内存计算——HANA

    因为工作关系,长期跟SAP打交道,所以去年就对HANA有了一些了解,只是公司目前的应用规模还较小,暂时没有上马HANA的打算,但是提前作一些学习还是很有必要的.正好清华大学出版社最近出版了这本< ...

  10. java 中的反射

    反射技术并不陌生,如何使用 ? 获取到类的全名 即可获取类中所有的信息: 构造.方法.成员变量等: 反射技术好多框架在使用,比如以前我们用jdbc,Class.forName("com.my ...