1

我在我的 Drupal MySQL 数据库中编辑了“评论”表以添加两行。这是因为我有一个接受 URL 参数的页面,所以虽然只有一个页面,但我需要区分该参数的值以进行评论。我在comment.module编辑 MySQL 查询时遇到问题。我在任何地方都找不到任何类型的'INSERT into...'查询,而不仅仅是在那个文件中。我查看了评论模块文件夹中的所有内容。

似乎影响数据库插入的是comment_publish_action()函数,comment.module但我仍然遇到有关添加列的一些问题,因为它们没有默认值。

这是那个函数,“typenode”和“idofnode”是添加的带有测试值的列:

function comment_publish_action($comment, $context = array()) {
  if (isset($comment->subject)) {
    $subject = $comment->subject;
    $comment->status = COMMENT_PUBLISHED;
  }
  else {
    $cid = $context['cid'];
    $subject = db_query('SELECT subject FROM {comment} WHERE cid = :cid', array(':cid' => $cid))->fetchField();
    db_update('comment')
      ->fields(array(
        'status' => COMMENT_PUBLISHED,
        'typenode' => 'player',
        'idofnode' => 1239
      ))
      ->condition('cid', $cid)
      ->execute();
  }
  watchdog('action', 'Published comment %subject.', array('%subject' => $subject));
}
4

1 回答 1

1

编辑 comment.module 不是一个好主意。在下一次核心更新期间,所有更改都将丢失。最好创建一个自定义模块并在那里实现一些钩子。

comment_save($comment)执行插入/更新新评论的步骤的功能。在此函数中,您可以找到drupal_write_record('comment', $comment);插入或更新数据库表“注释”的行(依赖于逻辑)。但在此行之前,有一个钩子module_invoke_all('comment_presave', $comment);允许您在 $comment 对象存储到数据库之前对其进行修改。这是一个很好的方法——在自定义模块中实现这个钩子并在那里进行修改。

function custom_module_comment_presave($comment) {
  //add rows info here
}
于 2013-04-02T07:10:05.807 回答