还原Drupal的Blog评论模式

原创 2004年07月10日 19:04:00

一直以来对于 Drupal 最不满意的就是必须用email注册来回复否则只能匿名回复,毕竟 Drupal 是一个以 blog 为主的系统,不是论坛,所以决定把Blog的评论模式还给 Drupal,按照 movabletype 的样式重新打造评论模块。

两点说明:1、方法非官方,事先请备份文件。2、参考自davidnunez的Anonymous Comments Hack

具体方法:

1.在数据库中的comments表添加3列:cnme, ceml, curl
sql语句:

ALTER TABLE comments ADD cnme varchar(60) DEFAULT NULL;
ALTER TABLE comments ADD ceml varchar(64) DEFAULT NULL;
ALTER TABLE comments ADD curl varchar(255) DEFAULT NULL;

2.改includes/common.inc

将其中的format_name方法替换为:

function format_name($object) {

  if ($object->uid && $object->name) {
    /*
    ** Shorten the name when it is too long or it will break many
    ** tables.
    */

    if (strlen($object->name) > 20) {
      $name = truncate_utf8($object->name, 15) ."...";
    }
    else {
      $name = $object->name;
    }

    if (arg(0) == "admin" and user_access("administer users")) {
      $output = l($name, "admin/user/edit/$object->uid", array("title" => t("Administer user profile.")));
    }
    else {
      $output = l($name, "user/view/$object->uid", array("title" => t("View user profile.")));
    }
  }
  else if ($object->name) {
    /*
    ** Sometimes modules display content composed by people who are
    ** not registers members of the site (i.e. mailing list or news
    ** aggregator modules).  This clause enables modules to display
    ** the true author of the content.
    */

    $output = $object->name;
  }
  //******HACK
  else if ($object->cnme) {
    if ($object->curl) {
      $pos = strpos($object->curl, "http://");
      if (is_int($pos)) {
        $output = l($object->cnme, "$object->curl");
      }
      else {
        $output = l($object->cnme, "curl/">http://$object->curl");
      }
    }
    else {
      $output = $object->cnme;
    }
  }
  //******END HACK
  else {
    $output = t(variable_get("anonymous", "Anonymous"));
  }

  return $output;
}

3.将modules/comment.module里的theme_comment_form方法替换为:

function theme_comment_form($edit, $title) {
  global $user;

  $form .= "/n";

  //******HACKED
  // name field:
  //$form .= form_item(t("Your name"), format_name($user));

  if (!empty($user->name)) {
    $form .= form_item(t("Your name"), format_name($user));
  } else {
    $form .= form_textfield(t("Your name"), "cnme", $edit["cnme"], 50, 64);
    $form .= form_textfield(t("E-Mail (Optional)"), "ceml",  $edit["ceml"], 50,64);
    $form .= form_textfield(t("Web Site (Optional)"), "curl", $edit["curl"], 50,64, "Be sure to start with http://");
  }
  //******


  // subject field:
  $form .= form_textfield(t("Subject"), "subject", $edit["subject"], 50, 64);

  // comment field:
  $form .= form_textarea(t("Comment"), "comment", $edit["comment"] ? $edit["comment"] : $user->signature, 70, 10, filter_tips_short());

  // preview button:
  $form .= form_hidden("cid", $edit["cid"]);
  $form .= form_hidden("pid", $edit["pid"]);
  $form .= form_hidden("nid", $edit["nid"]);

  if (!$edit["comment"] && variable_get("comment_preview", 1)) {
    $form .= form_submit(t("Preview comment"));
  }
  else {
    $form .= form_submit(t("Preview comment"));
    $form .= form_submit(t("Post comment"));
  }

  return theme("box", $title, form($form, "post", url("comment/reply/". $edit["nid"])));
}

4.将modules/comment.module中的对应语句替换(注意是db_query的INSERT INTO语句

db_query("INSERT INTO {comments} (cid, nid, pid, uid, subject, comment, hostname, timestamp, status, score, users, thread, cnme, ceml, curl)
VALUES (%d, %d, %d, %d, '%s', '%s', '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s')", $edit["cid"], $edit["nid"],
$edit["pid"], $user->uid, $edit["subject"], $edit["comment"],
$_SERVER['REMOTE_ADDR'], time(), $status, $score, $users, $thread, $edit["cnme"], $edit["ceml"], $edit["curl"]);

5.更改所使用的theme模板文件

如果使用的是xtemplate更改xtemplate.theme内相应方法:

function xtemplate_comment($comment, $links = 0) {
  global $xtemplate;

//**********HACK
      $result  = db_fetch_object(db_query("SELECT * FROM comments WHERE cid = %d", $comment->cid));

      $comment->cnme=$result->cnme;
      $comment->curl=$result->curl;
      $comment->ceml=$result->ceml;
//**********END HACK

  $xtemplate->template->assign(array (
    "new"       => t("new"),
    "submitted" => t("Submitted by %a on %b.",
                      array("%a" => format_name($comment),
                            "%b" => format_date($comment->timestamp))),
    "title"     => $comment->subject,
    "author"    => format_name($comment),
    "date"      => format_date($comment->timestamp),
    "content"   => $comment->comment
  ));

  if ($comment->new) {
    $xtemplate->template->parse("comment.new");
  }

  if ($picture = theme('user_picture', $comment)) {
    $xtemplate->template->assign("picture", $picture);
    $xtemplate->template->parse("comment.picture");
  }

  if ($links) {
    $xtemplate->template->assign("links", $links);
    $xtemplate->template->parse("comment.links");
  }

  $xtemplate->template->parse("comment");
  $output = $xtemplate->template->text("comment");
  $xtemplate->template->reset("comment");

  return $output;
}

如果使用phptemplate将phptemplate.theme内对应方法改为:

function phptemplate_comment_view($comment, $links = "", $visible = 1) {

 //**********HACK
      $result  = db_fetch_object(db_query("SELECT * FROM comments WHERE cid = %d", $comment->cid));

      $comment->cnme=$result->cnme;
      $comment->curl=$result->curl;
      $comment->ceml=$result->ceml;
 //**********END HACK

  $output = "";
  if (node_is_new($comment->nid, $comment->timestamp)) {
    $comment->new = 1;
  }

  if ($visible) {
    $comment->comment = check_output($comment->comment);
    $output .= theme("comment", $comment, $links);
  }
  else {
    $output .= theme("comment_folded", $comment);
  }
  return $output;
}

Done!

博客项目实现文章评论功能

达人科技 2017-01-20 19:09 我开发的博客网站的地址:http://118.89.29.170/RiXiang_blog/ 有了我的已成型的项目和代码,可以更容易理解这篇文章。 ...
  • u011277123
  • u011277123
  • 2017年01月22日 08:55
  • 1285

网站评论功能数据库设计和开发

本文主要分享了我在设计评论模块中的一些心得,希望对读者有些许帮助。 需求分析 现阶段评论做的最好的我想应该是网易新闻(app)里面的评论模块了,其“盖楼”的方式让人印象深刻,评论已经成为该app的...
  • u010098331
  • u010098331
  • 2016年05月18日 20:40
  • 12750

Django 评论功能的使用

comments库是django框架内置的一个评论库,官方文档地址:https://docs.djangoproject.com/en/dev/ref/contrib/comments/可以快捷的搭建...
  • a3997869
  • a3997869
  • 2014年10月16日 19:27
  • 1595

如何在Drupal7中用代码批量创建节点、评论和分类

最近,我忙于一个网站迁移工作。网站是使用某个老式CMS建立的,有一定数量的文章、不同的分类数据和用户评论。我的团队被雇来把这些数据从这个浪费人力物力的老式CMS上完整的迁移到功能更现代的开源Drupa...
  • moonbeam3
  • moonbeam3
  • 2012年04月03日 00:45
  • 1120

在Drupal7里如何写代码创建节点、评论和分类

1.怎样写代码创建一个节点 1.1初始化一个节点对象$node = new stdClass(); //创建一个节点对象$node->type = "page"; // 指定节点的类型$node->t...
  • kingqueenyun
  • kingqueenyun
  • 2011年06月05日 09:30
  • 672

Drupal7_6:匿名评论

前几篇文章是基于英文版的dp写的,经建议从这篇开始基于汉化的dp,虽然个人比较喜欢原版的。我的原则就是只为更简单!只要大家觉得简单实用就ok。 先看张图吧,我挺喜欢这个效果的。 下面来看看...
  • rydiy
  • rydiy
  • 2012年11月03日 16:25
  • 10129

drupal6 站点上如何在有新评论时自动发邮件通知管理员

可以通过配置网站Actions和trigger来实现,具体方法如下: 1.在 admin/settings/actions 下新建一个发送邮件的高级动作 2.配置发送邮件的地址、标题、内容...
  • wannianchuan
  • wannianchuan
  • 2011年11月30日 14:40
  • 991

如何在Drupal7的评论输入表单移除格式化选项和它的说明

这个需求看起来非常普通,但在Drupal 7里的实现方式还是略微不同于Drupal 6的。下面是详细方法: 修订:现在有了更容易的方法,就是安装Better Formats模块(http://dru...
  • moonbeam3
  • moonbeam3
  • 2012年04月03日 14:29
  • 1228

英文blog模板+WP评论

  • 2013年09月22日 10:23
  • 57KB
  • 下载

drupal中的IOC控制反转模式

控制反转(IOC)模式(又称DI:Dependency Injection)就是Inversion of Control,控制反转。在Java开发中,IoC意 味着将你设计好的类交给系统去控制,而不是...
  • wjc19911118
  • wjc19911118
  • 2012年07月09日 18:26
  • 646
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:还原Drupal的Blog评论模式
举报原因:
原因补充:

(最多只允许输入30个字)