DedeCms织梦问答系统允许游客直接提问的修改方法

织梦DEDECMS 赵建杰

 最近打算把织梦DedeCms的问答系统改为类似留言板的形式,游客可以自由提问,只能由管理员回答且可以设为最佳答案。用问答系统改成留言板的好处有进行栏目分类,且一个问题一个页面,这样利于收录。

具体还没修改成功,和大家分享一下游客提问的修改方法,不需要注册会员。

安装好问答插件后,编辑打开在根目录下的ask/post.php 文件,删除下面代码。

if(!isset($action)) $action = '';
if(empty($uid) && $action != 'rate')
{
 showmsgs('no_login','../member/login.php?gourl=../ask/');
 exit;
}

这样游客就可以提问了,但我不知道这样的方式是不是很好,希望织梦下一个版本会强化一下问答系统的功能,这样更方便我们使用。

 

DEDE问答(ask)模块游客匿名提问和解答

 

先说一下实现后的效果,首先这个修改后是一个精简版的dedecms问答系统,会取消采纳答案等功能,因取消会员功能后不再有答案的等级之分,如对答案的平分功能等将被取消。

 

  最后不建议使用匿名提问功能,建议使用会员功能来实现问答。这里是给大家提供一个学习的思路!

 

  下面说一下方法:

 

  post.php文件 

  

  if(empty($uid) && $action != 'rate') 

  { 

  showmsgs('no_login','../member/login.php?gourl=../ask/'); 

  exit; 

  } 

  

  1,修改成 或注释掉

  if(empty($uid) && $action != 'rate') 

  { 

  if($action!='ask' & $action!='') 

  { 

  showmsgs('no_login','../member/login.php?gourl=../ask/'); 

  exit; 

  } 

  }

  

  2,注释掉

  /*if($question['uid'] == $uid)

  {

  showmsgs('asker_cannot_answer', '-1');

  }else*/

  3,然后

  if($answer['uid'] != $uid)

  {

  showmsgs('unallowed_action', $backurl);

  }else

  替换成

  if($question['uid'] == $uid)

  {

  showmsgs('asker_cannot_answer', '-1');

  }else

  这样就不能修改答案了,不过这个提示是不会回答自己的问题。

  

  或者直接注释掉:修改答案部分的php代码。

  else if($action == 'modifyanswer')

  {

  $answer = $dsql->getone("SELECT answer.id, answer.uid, ask.dateline, ask.solvetime, ask.status, ask.expiredtime FROM `dede_askanswer` answer left join dede_ask ask on ask.id=answer.askid WHERE answer.id='$id'");

  if($answer)

  {

  if($answer['uid'] != $uid)

  {

  showmsgs('unallowed_action', $backurl);

  }elseif($answer['status'] != 0)

  {

  showmsgs('question_solved', $backurl);

  }elseif($answer['expiredtime'] < $timestamp)

  {

  showmsgs('question_expired', $backurl);

  }

  } else

  {

  showmsgs('question_nonexistence');

  }

  

  if(trim($content) == '')

  {

  showmsgs('post_answer_isnull');

  }

  if(strlen($content) > 10000)

  {

  showmsgs('post_answer_toolong');

  }

  if(strlen($brief) > 200)

  {

  showmsgs('post_brief_toolong', '-1');

  }

  if($dsql->ExecuteNoneQuery("update dede_askanswer set content='$content', brief='$brief' where id='$id'"))

  {

  showmsgs('modifyanswer_success',$backurl);

  }else

  {

  showmsgs('modifyanswer_failed',$backurl);

  }

  }

  

  question.php

  注释

  if($question['uid'] == $uid)

  {

  $publisher = 1;

  }

 

发表评论:

赵建杰
最新版本

修改方法如下:

找到dedecms5.7的/ask/control目录下的question.php文件,找到其中的这样一段代码:

if(empty($this->cfg_ml->M_ID))
{
ShowMsg('您尚未登录,请先登录',$GLOBALS['cfg_ask_member']);
exit;
}
if($this->cfg_ml->M_Spacesta < 0)
{
ShowMsg('您还没有通过审核,暂时不能提问,请耐心等....','-1');
exit;
}
删除即可。
赵建杰2011-9-10 9:40:28 回复