Drupal在评论存储中添加行-在哪里编辑'INSERT'查询


Drupal adding rows in comment storage - Where to edit 'INSERT' query?

我编辑了Drupal MySQL数据库中的'comment'表,添加了两行。这是因为我有一个接受URL参数的页面,所以虽然只有一个页面,但我需要区分该参数的注释值。我有麻烦编辑我的comment.module编辑MySQL查询。我找不到任何类型的'INSERT into...'查询,不只是在那个文件中。我已经查看了注释模块文件夹中的所有内容。

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

这是该函数,'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));
}

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

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

function custom_module_comment_presave($comment) {
  //add rows info here
}