热度 1|||
和这个回复框对应的代码是:
当用户填写了回复的内容后,点击回复链时,回复的内容就发给了source/include/spacecp/文件夹里的文件spacecp_doing.php来处理,比如将新回复添加到数据库里。注意回复框里有个隐藏的参数commentsubmit被赋值true。这使得提供了添加和删除评论及回复等多项功能的spacecp_doing.php知道对当前的请求应该做何种处理。下面是实现这个功能的部分代码:
从中可以看到那里的代码用了source/class/table文件夹里的table_home_docomment类提供的数据处理功能将用户提交的新回复加到了数据库里。
总结一下,大致而言记录功能是通过下图里这些PHP文件和HTML文件来实现的:
实现这个功能的基本步骤:
有关修改回复:
1。加入修改回复的链接:space_doing_li.htm
2。修改链接调用的home.js里函数docomment_form,加上一个参数flavor用来区分新回复add和修改回复edit。注意修改home.js后,要更新缓存
3。修改储存回复的代码,需要区分新回复和修改回复:spacecp_doing.php
4。记录页有个现象:当添加了一个记录的回复后,那个回复仍然显示着。而回复一个回复后,那个回复框则消失了。不知第一种情况是不是有意为之。为了保存这个现象:修改home.js里的docomment_get
5。在修改回复时将原来的回复显示在textbox里:spacecp_doing.htm,spacecp_doing.php
6。在修改回复时不将原来的回复显示在textbox外:space_doing_li.htm,home.js
有关修改记录:
7。加入修改记录的链接:space_doing.htm
8。修改填写记录的框:space_doing_form.htm
9。修改储存记录的代码,需要区分新记录和修改记录:spacecp_doing.php
if($doid) { C::t('home_doing')->update( $doid, array('message' => $message)); } else { if(censormod($message) || $_G['group']['allowdoingmod']) { $doing_status = 1; } else { $doing_status = 0; } $setarr = array( 'uid' => $_G['uid'], 'username' => $_G['username'], 'dateline' => $_G['timestamp'], 'message' => $message, 'ip' => $_G['clientip'], 'port' => $_G['remoteport'], 'status' => $doing_status, ); $newdoid = C::t('home_doing')->insert($setarr, 1); $setarr = array('recentnote'=>$message, 'spacenote'=>$message); $credit = $experience = 0; $extrasql = array('doings' => 1); updatecreditbyaction('doing', 0, $extrasql); C::t('common_member_field_home')->update($_G['uid'], $setarr); if($_POST['to_signhtml'] && $_G['group']['maxsigsize']) { if($_G['group']['maxsigsize'] < 200) { $signhtml = getstr($_POST['message'], $_G['group']['maxsigsize'], 0, 0, 1); $signhtml = preg_replace("/\这是在submitcheck('commentsubmit')条件下的一段,只有前三行是新加的,用来区分和处理储存修改的回复:/i", ' ', $signhtml); } else { $signhtml = $message; } C::t('common_member_field_forum')->update($_G['uid'], array('sightml'=>$signhtml)); }
if ($_POST['flavor']=='edit') { C::t('home_docomment')->update( $updo['id'], array('message' => $message)); } else if ($_POST['flavor']=='add') { $setarr = array( 'doid' => $updo['doid'], 'upid' => $updo['id'], 'uid' => $_G['uid'], 'username' => $_G['username'], 'dateline' => $_G['timestamp'], 'message' => $message, 'ip' => $_G['clientip'], 'grade' => $updo['grade']+1 ); if($updo['grade'] >= 3) { $setarr['upid'] = $updo['upid']; } $newid = C::t('home_docomment')->insert($setarr, true); C::t('home_doing')->update_replynum_by_doid(1, $updo['doid']); if($updo['uid'] != $_G['uid']) { notification_add($updo['uid'], 'comment', 'doing_reply', array( 'url'=>"home.php?mod=space&uid=$updo[uid]&do=doing&view=me&doid=$updo[doid]&highlight=$newid", 'from_id'=>$updo['doid'], 'from_idtype'=>'doid')); updatecreditbyaction('comment', 0, array(), 'doing'.$updo['doid']); } }这段是为了在修改框里显示原来的记录或回复:
} else if ($_GET['op'] == 'docomment') { if ($_GET['flavor']=='edit') { if($id==0) { $value = C::t('home_doing')->fetch($doid); } else { $value = C::t('home_docomment')->fetch($id); } require_once DISCUZ_ROOT.'./source/class/class_bbcode.php'; $bb = & bbcode::instance(); $value[message] = $bb->html2bbcode($value[message]); $defaultstr = getdefaultdoing(); } }
function docomment_get(doid, key) { var showid = key + '_' + doid; var opid = key + '_do_a_op_'+doid; $(showid).style.display = ''; $(showid).className = 'cmt brm'; ajaxget('home.php?mod=spacecp&ac=doing&op=getcomment&handlekey=msg_'+doid+'&doid='+doid+'&key='+key+'&flavor=add', showid); if($(opid)) { $(opid).innerHTML = '收起'; $(opid).onclick = function() { docomment_colse(doid, key); } } showCreditPrompt(); }在编辑状态下隐藏原来的内容:
function docomment_form(doid, id, key, flavor) { var showid = key + '_form_'+doid+'_'+id; var divid = key +'_'+ doid; var url = 'home.php?mod=spacecp&ac=doing&op=docomment&handlekey=msg_' + id + '&doid=' + doid + '&id=' + id + '&key=' + key + '&flavor=' + flavor; var messageid = key + '_doing_message_' + doid + '_' + id; $(messageid).style.display = ''; if (flavor == 'edit') $(messageid).style.display = 'none'; if(parseInt(discuz_uid)) { ajaxget(url, showid); if($(divid)) { $(divid).style.display = ''; } } else { showWindow(divid, url); } } function docomment_form_close(doid, id, key, flavor) { var showid = key + '_form_' + doid + '_' + id; var opid = key + '_do_a_op_' + doid; var messageid = key + '_doing_message_' + doid + '_' + id; $(showid).innerHTML = ''; $(showid).style.display = 'none'; if(flavor=='edit') $(messageid).style.display = ''; var liObj = $(key+'_'+doid).getElementsByTagName('li'); if(!liObj.length) { $(key+'_'+doid).style.display = 'none'; if($(opid)) { $(opid).innerHTML = '回复'; $(opid).onclick = function () { docomment_get(doid, key); } } } }
'doing_maxlimit_char_prefix' => '还可输入', 'doing_maxlimit_char_suffix' => '个字符',
2)修改回复
ladyff: 看到这个日志。
突然想到,discuz似乎需要给日志、发帖等添加一个历史记录版本,这样如果用户修改了发帖,管理员依然可以看到修改前后的内容,类似于wiki,对于 ...
Powered by Discuz! X3.1
© 2001-2014 Comsenz Inc.
GMT-4, 2024-3-29 06:06 AM
, Processed in 0.017831 second(s), 11 queries.
,ApcOn