1、在 user.php 文件修改
(1)、首先,考虑到用户中心的功能都是需要用户登录后才可以调用的。在 $ui_arr 数组中增加新的action
/* 显示页面的action列表 */
$ui_arr = array('register', 'login', 'profile', 'order_list', 'order_detail', 'address_list', 'collection_list',
'message_list', 'contribution_list', 'tag_list', 'get_password', 'reset_password', 'booking_list', 'add_booking', 'account_raply',
'account_deposit', 'account_log', 'account_detail', 'act_account', 'pay', 'default', 'bonus', 'group_buy', 'group_buy_detail', 'affiliate', 'comment_list','validate_email','track_packages', 'transform_points','qpassword_name', 'get_passwd_question', 'check_answer');
例如上面源码,我在 message_list 后面,增加了 contribution_list 新 action
这样才能保证新动作可以被顺利执行。
(2)、增加action判断,并执行相应的数据读取、传递工作。
/* 显示我的稿件列表 */
elseif ($action == 'contribution_list')
{
include_once(ROOT_PATH . 'includes/lib_clips.php');
$smarty->display('user_clips.dwt');
}
2、修改模板文件 user_clips.dwt。
<!--*我的稿件 start-->
<!-- {if $action eq 'contribution_list'} -->
同样也是使用判断 $action 的方式,来处理不同的 action 模板。
3、为了兼容不同的语言版本,模板文件中,通用的UI文字,通常使用语言文件进行定义。所以还需要修改语言文件 user.php
(1)、语言定义。
/* 稿件 */
$_LANG['contribution_number'] = '序号';
$_LANG['contribution_title'] = '广告标题';
$_LANG['contribution_status'] = '审核';
$_LANG['contribution_addtime'] = '时间';
(2)、模板中调用:
<td bgcolor="#ffffff">{$lang.contribution_number}</td>
具体的数据库读取稍后补全。
4、读取数据库信息
(1)、读取统计信息
$record_count = $db->getOne($sql);
分页之前,需要统计总数。
(2)、读取所有符合的记录
$orders = $db->getAll($sql);
读取数据量不是很大的一批数据。
(3)、分页读取
分页函数:get_pager($url, $param, $record_count, $page = 1, $size = 10)
例如
$pager = get_pager('user.php', $act, $record_count, $page, 5);
然后在读取数据库时,使用
$res = $GLOBALS['db']->SelectLimit($sql, $num, $start); 函数读取一页数据。
5、上传文件
(1)、前端UI
(2)、判断文件大小限制
/* 检查上传文件大小限制 */
$upload_size_limit = $GLOBALS['_CFG']['upload_size_limit'] == '-1' ? ini_get('upload_max_filesize') : $GLOBALS['_CFG']['upload_size_limit'];
$last_char = strtolower($upload_size_limit{strlen($upload_size_limit)-1});
switch ($last_char)
{
case 'm':
$upload_size_limit *= 1024*1024;
break;
case 'k':
$upload_size_limit *= 1024;
break;
}
if ($contrib['upload'])
{
if($_FILES['contribution_img']['size'] / 1024 > $upload_size_limit)
{
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['upload_file_limit'], $upload_size_limit));
return false;
}
$img_name = upload_file($_FILES['contribution_img'], 'contribimg');
if ($img_name === false)
{
return false;
}
}
此段代码摘自 /includes/lib_clips.php ,其中配置参数$GLOBALS['_CFG']的文件路径待查。
(3)、判断文件类型限制
后台发布新文章时,还有检查上传文件的类型。
// 检查文件格式
if (!check_file_type($_FILES['file']['tmp_name'], $_FILES['file']['name'], $allow_file_types))
{
sys_msg($_LANG['invalid_file']);
}
留言时没有检查,我怀疑是否在保存文件函数中做了检查:
$img_name = upload_file($_FILES['contribution_img'], 'contribimg');
暂未查到 upload_file函数所在的文件路径。
6、入库
(1)、直接入库
(2)、封装入库操作到库函数
7、错误提示
(1)、后台错误提示
(2)、前台错误提示
if (add_message($message))
{
show_message($_LANG['add_message_success'], $_LANG['message_list_lnk'], 'user.php?act=message_list&order_id=' . $message['order_id'],'info');
}
else
{
$err->show($_LANG['message_list_lnk'], 'user.php?act=message_list');
}
函数 show_message 用来提示成功的消息。相反,$err->show 用来提示失败的消息。
8、使用FCKeditor编辑器
(1)、引用文件和前台调用
(2)、后台接收数据