还原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!

建设一个学习Drupal的网站----------之学习笔记

问题记录:1、Drupal8 提供了WYSIWYG编辑工具
  • wy_______
  • wy_______
  • 2017-07-20 21:18:10
  • 91

Drupal上把phpExcel生成的Excel文件保存到Drupal文件系统

Drupal上把phpExcel生成的Excel文件保存到Drupal文件系统
  • huangbiubiu
  • huangbiubiu
  • 2017-10-20 16:57:32
  • 101

个人感觉drupal就是blog和wiki的合体!

 我首先试用的是mediawiki,感觉很难上手,代码不同于HTML,但有又相同之处.整个页面每个用户都可以编辑.在WIKI上每个用户都是作者,他们共同编辑,共同维护网站,所以团队性很强!如果一处页面...
  • ugowiki
  • ugowiki
  • 2008-02-25 13:44:00
  • 297

drupal7 中解决修改某一个字段值,同时清空缓存

更多资料请看点击打开链接
  • wjc19911118
  • wjc19911118
  • 2012-10-17 09:31:24
  • 1781

drupal学习之-安装篇

步骤1:下载 下载最新版本的Drupal 7。 你会得到一个文件名为Drupal的7.x.tar.gz。将压缩文件解压。 使用SFTP客户端登录到您的服务器和浏览到网站的根目录。上传...
  • wjc19911118
  • wjc19911118
  • 2012-06-26 12:51:13
  • 4462

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

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

drupal模块推荐:AJAX Comments

http://drupal.org/project/ajax_commentsAJAX CommentsViewCVS instructionsModules · Content displayneo...
  • linlu11
  • linlu11
  • 2009-11-09 22:00:00
  • 754

云客Drupal8源码分析之网站维护模式

当drupal8的网站需要升级、导入内容、备份、更改内容类型等等会影响访问用户的时候需要开启维护模式,操作路径是:管理-配置-开发-维护模式 开启维护模式并输入提示内容即可,在提示内容中@site可以...
  • u011474028
  • u011474028
  • 2016-11-22 17:45:09
  • 407

Drupal上使用代码添加新角色,并赋予角色权限

Drupal上使用代码添加新角色,并赋予角色权限
  • huangbiubiu
  • huangbiubiu
  • 2017-10-20 17:20:24
  • 92

drupal6翻译

# Chinese, Simplified translation of Drupal core (6.20) # Copyright (c) 2011 by the Chinese, Simpli...
  • woshirongshaolin
  • woshirongshaolin
  • 2012-09-07 22:13:29
  • 49029
收藏助手
不良信息举报
您举报文章:还原Drupal的Blog评论模式
举报原因:
原因补充:

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