Board logo

标题: 如何制作UCenter Home插件详解 [打印本页]

作者: fangzhen    时间: 2009-6-22 23:24     标题: 如何制作UCenter Home插件详解

下面,我以一个简单的《记账本》插件,来教大家,如何在目前 UCenter Home 中,制作一个标准的、不受 UCHome 版本升级影响的通用插件。 当然,以下的部分说明我尽量简单扼要,但是对于不懂PHP的人来说,可能还是一头雾水,毕竟制作插件,需要你有一定PHP基础。在这里,顺便鼓励大家抓紧学习一下 PHP。 制作一个不受 UCHome 版本影响的插件,请遵循以下规范: 1) 不修改 UCHome 的模板,而使用自己的模板(左侧导航菜单除外); 2) 不修改 UCHome 的 PHP 文件,而使用自己的 PHP 文件; 3) 不修改 UCHome 的数据表结构,而使用自己的 数据表。 如何编写《记账本》? 第一步,创建文件, 给自己的插件命名一个 PHP 文件、一个对应的模板文件。 我们命名《记账本》的PHP文件为:money.php 文件,并存放到 UCHome 的程序根目录。 我们命名模板文件为:money.htm 文件,并存放到 UCHome 的模板目录 ./template/default/ 下面。 并为自己的插件创建数据表。 在这里,《记账本》的数据表的创建SQL为: CREATE TABLE uch_plug_money (uid mediumint(8) unsigned NOT NULL, username varchar(15) NOT NULL, content mediumtext NOT NULL, money float NOT NULL, self tinyint(1) NOT NULL default '0', PRIMARY KEY (uid) ) TYPE=MyISAM; 第二步,编程 money.php 编写插件中,经常用到的基本变量、函数含义列表如下: $_SGLOBAL['supe_uid'] 该变量为当前用户的UID $_SGLOBAL['supe_username'] 该变量为当前用户的名字 $_SGLOBAL['db'] 数据库操作对象 showmessage(message, url) 该函数为显示跳转信息: message 为信息, url 为跳转url ckstart(start, perpage) 检查输入的start是否合法:start 为开始数,perpage为每页显示数 smulti(start, perpage, count, url) 获取分页的函数:start 为开始数,perpage为每页显示数,count为当前列表数,url为页面url $space = getspace(uid) 该函数为获取当前用户的空间信息:uid为用户uid 其中获取到的$space,常用的有以下几个: $space['uid'] 用户UID $space['username'] 用户名 $space['frienduid'] 用户的好友UID列表,以逗号分割。例如:1,5,6,7 添加个人动态的方法: include_once(S_ROOT.'./source/function_cp.php'); $icon = 'money'; //个人动态前面的图标英文名,随意命名,需要修改css支持 $title_template = '{actor} 更新了自己的 记账本'; //标题内容,支持html,其中 {actor} 为内置变量,表示当前人名 feed_add($icon, $title_template);
作者: fangzhen    时间: 2009-6-22 23:25

PHP文件基本的代码结构为: 记账本'; //标题内容,支持html,其中 {actor} 为内置变量,表示当前人名 feed_add($icon, $title_template); */ //检查是否登录 if(empty($_SGLOBAL['supe_uid'])) { showmessage('请先登录后,再访问', 'do.php?ac=login'); } //获取当前用户的空间信息 $space = getspace($_SGLOBAL['supe_uid']); //列表变量 $list = array(); //数量 $count = 0; //每页显示个数 $perpage = 20; //分页开始 $start = empty($_GET['start'])?0:intval($_GET['start']); //检查输入的start是否合法 ckstart($start, $perpage); //根据不同的方法做不同的处理 //默认的方法 if(empty($_GET['action'])) $_GET['action'] = 'me'; if($_GET['action'] == 'we') { //好友的记账本 //检查有没有好友列表 if(empty($space['frienduid'])) { showmessage('对不起,您当前还没有好友'); } //检索好友的记账本 $query = $_SGLOBAL['db']->query("SELECT * FROM uch_plug_money WHERE uid IN ($space[frienduid]) AND self='0' LIMIT $start,$perpage"); while ($value = $_SGLOBAL['db']->fetch_array($query)) { $list[] = $value; //count累加 $count++; } if(empty($list)) { showmessage('现在你的好友还没有公开的记账本', 'money.php'); } //分页处理 $multi = smulti($start, $perpage, $count, "money.php?action=$_GET[action]"); } elseif($_GET['action'] == 'me') { //检索自己的记账本 $query = $_SGLOBAL['db']->query("SELECT * FROM uch_plug_money WHERE uid='$_SGLOBAL[supe_uid]'"); while ($value = $_SGLOBAL['db']->fetch_array($query)) { $list[] = $value; } } elseif($_GET['action'] == 'edit') { //编辑自己的记账本 //提交保存的处理 if(submitcheck('editsubmit')) { $content = shtmlspecialchars($_POST['content']); preg_match_all("/([\+\-]\d+)/is", $content, $mathes); $money = 0; if($mathes[1]) { foreach ($mathes[1] as $value) { $money = $money + $value; } } $self = empty($_POST['self'])?0:1; $_SGLOBAL['db']->query("REPLACE INTO uch_plug_money (uid,username,content,money,self) VALUES ('$_SGLOBAL[supe_uid]','$_SGLOBAL[supe_username]','$content','$money','$self')"); //产生个人动态feed //需要单独调用该函数库文件 include_once(S_ROOT.'./source/function_cp.php'); $icon = 'money'; //图标,随意命名,需要修改css支持 $title_template = '{actor} 更新了自己的 记账本'; //标题内容,支持html,其中 {actor} 为内置变量,表示当前人名 feed_add($icon, $title_template); showmessage('记账保存成功了', 'money.php'); } //获取自己的记账本信息 $query = $_SGLOBAL['db']->query("SELECT * FROM uch_plug_money WHERE uid='$_SGLOBAL[supe_uid]'"); $money = $_SGLOBAL['db']->fetch_array($query); } //页面的标题 $_TPL['titles'] = array($space['username'], '记账本'); //页面不同的标签激活 $actives = array($_GET['action']=>' class="active"'); //------这里填写你自己的插件功能代码 结束------ //调用模板显示数据 include template('money'); ?>
作者: fangzhen    时间: 2009-6-22 23:27

第三步,编写模板 money.html 模板的语法,跟Discuz!模板机制一样,模板文件的基本结构为:
$space[username]

记账本

我的空间
我要记账
记录收入和开支
用户 余额
$value[username] $value[money] 元
$multi[html]
用 "+金额" 表示收入,用 "-金额" 表示表示支出,保存后,系统会自动记录目前你的余额。
例如你这样记账:
“我今天发+1000元工资了,去买了电视,花了-200元。”
提交保存后,显示余额为 800。就这么简单。

checked>仅自己可见
TOP

作者: fangzhen    时间: 2009-6-22 23:28

第四步,需要在UCH的左侧栏增加导航菜单 打开 ./template/default/header.htm 文件,找到:
  • 分享
  • 在后面添加
  • 插件名
  • 即可。 现在,一个插件从编写、到使用,就完成了。




    欢迎光临 PHP开发笔记 (http://phpvi.com/) Powered by Discuz! 6.1.0