-
XOOPS模块的开发设计教程文档 - [xoops]
2008-03-14
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
XOOPS模块的开发设计教程文档
http://yaho.blogbus.com/logs/16987248.html
一、概述
本文档主要介绍XOOPS模块的开发设计及安装配置。Xoops的模块的便于安装 在xoops系统下,主要作用由其自身的功能决定,现在[url]www.xoops.org.cn[/url]下有很多 免费的模块下载。开发xoops的模块就要参照它官方的标准来制作,后面我主要通 过eclipse制作一个例子来介绍xoops模块的开发。看本文前请先阅读同目录下 《CMS之XOOPS介绍.doc》
二、开发设计
1.文件结构
设计前,请按以上标准来建立文件夹。区块程序文件夹也要建立一个模板 文件夹来放置blocks的模板 /templates/blocks,.project为eclipse工程文件。
2.编写xoops_version.php文件
xoops_version.php是一个模块的核心配置文件,是和主程序连接的纽带。
// 模块名称
$modversion['name'] = '文件管理';
// 版本号
$modversion['version'] = '1.00';
// 模块说明
$modversion['description'] = '一个测试的模块';
// 版权所有者
$modversion['credits'] = 'MyRice.Dep';
// 作者
$modversion['author'] = 'Alex Jia';
// 帮助页面
$modversion['help'] = 'help.html';
// 版权列号
$modversion['license'] = 'GPL see LICENSE';
// 模块 logo 图片
$modversion['image'] = 'images/logo.png';
// 模块目录名称
$modversion['dirname'] = 'test';
// 模版文件
$modversion['templates'][1]['file'] = 'test_index.html';
// 模版说明
$modversion['templates'][1]['description'] = 'Test Form';
更详细的关于xoops_version.php程序配置请查看 [url]http://dev.xoops.org/modules/phpwiki/index.php/ModVersion[/url]
3.语言模块文件夹文件结构设置
以简体中文为例在language下chinese文件夹 language/Chinese,需要的程序文 件请见下图。 然后对需要设置的部分的对应的语言文件进行编写 例如:modinfo.php
<?php
//先建一个 modinfo.php 代码如下, define为定义常数函数,xoops 的习惯,常第
一字母为 _ ,
//以大写字母为常数名。
define("_NAME","文件管理");
define("_DESC","一个简单的文件程序");
?>
4.制作一个logo.png的模块logo图片文件放到images文件夹下。(这里的logo后缀
一定要用.png,也就是说logo必须为png格式的文件)
5.编辑index.php文件
系统默认读取web发布文件
<?php
// 插入系统设定文挡
include "../../mainfile.php";
// 插入头文件
include "../../header.php";
echo "文件管理模块";
// 插入尾文件
include "../../footer.php";
?>
OK,现在这个测试的安装小模块已经完成。我们安装测试一下 我们把我们刚刚写的模块放到xoops/modules下,然后进入xoops的模块管理区, 要安装的模块都会在最下端显示,如下图:
然后点模块状态下面那个黑色的图标进行安装,进入下一步,如下图
点安装按钮进行安装
这里看到的test_index.html我们在后面进行编写 点回到模块管理菜单见下图,安装成功。
6.接下来我们写test.index.html文件 此文件放到templates文件夹下。
应用到php的部分应该用smarty格式编写<{$var}>
<form action="<{$smarty.server.PHP_SELF}>" method="post"
enctype="multipart/form-data">
<table width='100%' class='outer' cellspacing='1'>
<tr><th colspan='2'>文件管理</th></tr>
<tr>
<td class='head'>标题</td>
<td class='even'><input type="text" name="d_name" size="30"></td>
</tr>
<tr>
<td class='head'>类别</td>
<td class='even'>
<select name="d_kind">
<{html_options values=$kind_arr output=$kind_arr }>
</select>
</td>
</tr>
<tr>
<td class='head'>说明</td>
<td class='even'><input type="text" name="d_memo" size="60"></td>
</tr>
<tr>
<td class='head'>文件</td>
<td class='even'><input type="file" name="infile"></td>
</tr>
<tr>
<td class='head'></td>
<td class='head'><input type="submit" name="op" value="上传"></td>
</table>
</form>
7.更新模块让系统读入新写的模板页
更新后提示成功
这有个小技巧,在开发模块的时候,也许我们得经常的更新模板页,每次更新一次就得按 上面的程序操作一次,有写麻烦,xoops之所以这样设计是为了加快读取摸板的速度,在摸板 开发阶段,可以把自动更新模块设置为“是”,这样就可以减少麻烦了。
8.修改index.php,插入test_index.html
<?php
// 插入系统设定文挡
include "../../mainfile.php";
// 插入头文件
include "../../header.php";
// 插入模板
$xoopsOption['template_main'] = "test_index.html";
// 插入尾文件
include "../../footer.php";
?>
9.接下来我们要求模块对数据库进行一下操作建立一个表
写一个mysql.sql的文件如下 ,放到test/sql文件夹下
d_id 流水号
-- uname 用户名
-- d_name 标题
-- d_kind 类别
-- d_memo 说明
-- d_time 插入时间
-- d_file 文件名
CREATE TABLE `test` (
`d_id` int(11) NOT NULL AUTO_INCREMENT,
`uname` varchar(25) NOT NULL DEFAULT '',
`d_name` varchar(40) NOT NULL DEFAULT '',
`d_kind` varchar(20) NOT NULL DEFAULT '',
`d_memo` varchar(100) NOT NULL DEFAULT '',
`d_time` timestamp(14),
`d_file` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`d_id`)
) ENGINE=MyISAM;.
10.修改 xoops_version.php,加入数据库设置相关代码,如下:
// 数据表结构
$modversion['sqlfile']['mysql'] = "sql/mysql.sql";
// 数据表名称
$modversion['tables'][0] = "test";
$modversion[’tables’][n] , n从0开始编写,但名称必须和 sql/mysql.sql中的语句想符合,用到那个表都要在这里声明,我们这里 只是使用CREATE TABLE `test` 所以 $modversion[’tables’][0]= “test”;
11. 如果第一次安装时没有建立数据库表结构,必须反安装模块组,
再重新安装,让系统重新载入数据库。(这里步骤不在重复)
12.在test/主目录建立upload.php文件
<?php
// 插入系统设定文挡
include "../../mainfile.php";
// 插入头文件
include "../../header.php";
//判断使用者身份
if (! $xoopsUser ) {
redirect_header(XOOPS_URL,3,'没有权限使用被模块');
exit;
}
// 判使用者是否按送按
if ($_POST['op'] == '上传'){
// 取得使用者
$uname = $xoopsUser->getVar("uname");
$d_name = $_POST['d_name'];
$d_memo = $_POST['d_memo'];
if (is_uploaded_file($_FILES['infile']['tmp_name'])){
// 不允许上传php程序文件
$no_arr = array("php","php3","exe","dll");
$temp_arr = explode(".",$_FILES['infile']['name']);
if (in_array(strtolower(end($temp_arr)),$no_arr)){
redirect_header('index.php',2,"不允许上传 php 文件");
exit;
}
$file_path = XOOPS_UPLOAD_PATH."/test";
// 如果未建立目录则在uploads下建立test的目录
if (!is_dir($file_path)){
// 建立目录
mkdir($file_path);
}
// 存档名称
$d_file = time()."_".$_FILES['infile']['name'];
// copy 上传文件到 uploads 下,上传文件名称加上时间避免同名覆盖
copy($_FILES['infile']['tmp_name'],$file_path."/".$d_file);
}
// 插入到数据库
$sql = "INSERT INTO ".$xoopsDB->prefix("test")."
(uname,d_name,d_memo,d_file)VALUES('$uname','$d_name','$d_memo','$d_file')";
if ( !$result = $xoopsDB->query($sql) ) {
// 删除文档
unlink($file_path."/".$d_file);
redirect_header('index.php',2,"添加失败!");
exit();
}
redirect_header('index.php',2,"新增成功!");
}
// 插入模板
$xoopsOption['template_main'] = 'test_index.html';
// 插入尾文件
include "../../footer.php";
?>
13.在 xoops_version.php 加入第二个模板并增加子菜单,如下例,
再由系统管理处更新模块,重新载入模板文件到系统。
// 模板文件
$modversion['templates'][2]['file'] = 'test_view.html';
$modversion['templates'][2]['description'] = '列出文件';
$modversion['templates'][3]['file'] = 'test_sel.html';
$modversion['templates'][3]['description'] = '查看文件';
// 加入子
$modversion['sub'][1]['name'] = '文件列表';
$modversion['sub'][1]['url'] = "view.php";
$modversion['sub'][2]['name'] = '类别管理';
$modversion['sub'][2]['url'] = "kind.php";
14.编辑view.php 放到test/ 主目录
<?php
include "../../mainfile.php";
include "../../header.php";
if ($_REQUEST['op']=='delete'){
$d_id = $_REQUEST['d_id'];
$uname = $xoopsUser->getVar('uname');
$sql = "SELECT d_file FROM ".$xoopsDB->prefix('test')."
WHERE d_id='$d_id' AND uname='$uname'";
$res = $xoopsDB->query($sql);
if ($xoopsDB->getRowsNum($res) >0 ){
$rows = $xoopsDB->fetchArray($res);
$d_file = $rows['d_file'];
$sql = "DELETE FROM ".$xoopsDB->prefix('test')."
WHERE d_id=$d_id";
$xoopsDB->query($sql);
// 删除文件
$d_file = XOOPS_UPLOAD_PATH."/test/$d_file";
unlink($d_file);
}
}
// 载如模板
$xoopsOption['template_main'] = 'test_view.html';
// 查询 test 文件
$query = "SELECT * FROM ".$xoopsDB->prefix("test");
$res = $xoopsDB->query($query);
// 将查询结果放回数组
$arr = array();
while($rows = $xoopsDB->fetchArray($res)){
$arr[] = $rows;
}
// 将结果数组传给模板
$xoopsTpl->assign("docdata",$arr);
// 将用户帐号传回模板
$xoopsTpl->assign("uname",$xoopsUser->getVar('uname'));
include "../../footer.php";
?>
15.编辑test_view.html 放到templates/文件夹
<table class='outer' cellpadding='4' cellspacing='1'>
<tr valign='middle'><th>标题</th><th>上传人</th><th>文件</th>
<{if $uname}><th>管理</th><{/if}>
</tr>
<!-- 显示所有上传的文件 -->
<{foreach from=$docdata item=data}>
<tr class="<{cycle values="even,odd"}>"><td><a href='sel.php?d_id=
<{$data.d_id}>'><{$data.d_name}></a></td><td><{$data.uname}></td>
<td><a href='<{$smarty.const.XOOPS_URL}>/uploads/test/<{$data.d_file}>'
target='_blank'><{$data.d_file}></a></td>
<{if $uname}><td><{if $uname eq $data.uname}><a href=
'<{$smarty.server.PHP_SELF}>?op=delete&d_id=<{$data.d_id}>'>删除</a><{/if}>
</td>
<{/if}>
</tr>
<{/foreach}>
</table>
16.编辑sel.php 放到test/主文件夹
<?php
include "../../mainfile.php";
include "../../header.php";
$xoopsOption['template_main'] = 'test_sel.html';
// 查询 test 资料
$query = "SELECT * FROM ".$xoopsDB->prefix("test")."
WHERE d_id=".$_REQUEST['d_id'];
$res = $xoopsDB->query($query);
$rows = $xoopsDB->fetchArray($res);
// 将结果传给模板
$xoopsTpl->assign("data",$rows);
include "../../footer.php";
?>
17.编辑test_sel.html 放到templates/文件夹
<table width='100%' class='outer' cellspacing='1'>
<tr><th colspan='2'>文件管理</th></tr>
<tr>
<td class='head'>序号</td>
<td class='even'><{$data.d_id}></td>
</tr>
<tr>
<td class='head'>上传时间</td>
<td class='even'><{$data.d_time}></td>
</tr>
<tr>
<td class='head'>标题</td>
<td class='even'><{$data.d_name}></td>
</tr>
<tr>
<td class='head'>说明</td>
<td class='even'><{$data.d_memo}></td>
</tr>
<tr>
<td class='head'>文件</td>
<td class='even'><{$data.d_file}></td>
</tr>
</table>
18. 在 xoops_version.php 加入区块设置,如下:
(其实xoops里的区块就是指首页的样式,只要进入区块设置看一下就知道了)
// 区块模板
$modversion['templates'][4]['file'] = 'test_new.html';
$modversion['templates'][4]['description'] = 'lastest file ';
// 区块设置
$modversion['blocks'][1]['file'] = "news_block.php";
$modversion['blocks'][1]['name'] = "新加入文件";
$modversion['blocks'][1]['description'] = "显示新加入文件";
$modversion['blocks'][1]['show_func'] = "b_news_show";
$modversion['blocks'][1]['template'] = 'news_block.html';
19. 在 test/blocks 目录添加 news_block.php
<?php
// 显示最新的5个新增文件
function b_news_show() {
global $xoopsDB;
$sql = "SELECT d_id,d_name,d_time FROM ".$xoopsDB->
prefix('test')." ORDER BY d_time LIMIT 5 ";
$res = $xoopsDB->queryF($sql);
$block = array();
while($rows = $xoopsDB->fetchArray($res)){
$block[] = $rows;
}
return $block;
}
?>
20. 在 templates/blocks 目录建立 news_block.html
<ul>
<{foreach item=docs from=$block}>
<li><a href="<{$xoops_url}>/modules/docman/sel.php?
d_id=<{$docs.d_id}>"><{$docs.d_name}></a>
(<{$docs.d_time|date_format:"%Y-%m-%d"}> )</li>
<{/foreach}>
</ul>
21.添加区块
现在我们把刚刚完成的区块添加到首页
完成如下图
22.制作管理文件页面
下面需要做一个管理页面把以上写过的三个文件关联起来 , 也就是在管理的下拉菜单中显示出来。需要在admin文件夹下建立两个文件 test/admin/admin.php 管理页面首页 test/admin/menu.php 下拉菜单显示 而且还修改xoops_version.php配置文件
建立admin.php文件 代码如下:
<?
include '../../../include/cp_header.php';
xoops_cp_header();
$xTheme->loadModuleAdminMenu(1, _PROFILE_MI_INDEX);
xoops_cp_footer();?>
建立menu.php文件代码如下
<?php
$adminmenu[1]['title'] ="上传文件";
$adminmenu[1]['link'] = "upload.php";
$adminmenu[2]['title'] = "文件管理";
$adminmenu[2]['link'] = "view.php";
?>
修改xoops_version.php配置文件在最后添加
// 管理接口
$modversion['hasAdmin'] = 1; //是否有管理接口
$modversion['adminindex'] = "admin/admin.php"; //管理接口的首页位置
$modversion['adminmenu'] = "admin/menu.php"; //管理接口的选单程式
// Menu
$modversion['hasMain'] = 1; //是否有菜单项
ok现在程序就已经基本完成我们更新一下,看一下结果随机文章:
xoops的页面结构 2008-03-14论坛推荐(107个) 2007-12-17电子商务的转型出路设想 2006-01-03探访美国最火的分类广告网站 2006-01-03个人创业,要有怎样的意识和心胸 2006-01-03
收藏到:Del.icio.us








评论
网站ASP源码,但是没有密码和验证码,无法管理,
请求你的帮助,非常感谢!!
我的QQ:4218514
这个邮箱是我的,你回复给我也可以。。。
非常感谢!!