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

时间:2013-04-02 05:12:02

标签: php drupal

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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