Как напечатать один комментарий в drupal?

Я хочу напечатать отдельный комментарий в drupal на основе его идентификатора комментария. Как я могу это сделать? Google и другие источники мне ничего не дали. Спасибо.

3 ответа

Решение

Предложение Итона хорошо (кроме {comments}не {comment}) если вам нужно отобразить комментарий, как это делает ядро, включая информацию, поступающую с узла. За исключением реализации по умолчанию theme_comment в modules/comment/comment.tpl.php не использует $node.

Однако я бы сделал это немного по-другому, потому что, если вам нужно извлечь один комментарий, отобразите его с обычным форматированием содержимого, предоставленным comment.tpl.php скорее всего будет неуместным.

function print_comment($cid) {
  $sql = "SELECT * FROM {comment} c WHERE c.cid = %d";
  if ($comment = db_fetch_object(db_rewrite_sql(db_query($sql, $cid), 'c'))) {
    return theme('my_special_comment_formatting', $comment);
  }
}

И, конечно, определите это специальное форматирование комментария в вашем модуле hook_theme() реализация, вдохновленная тем, что comment.tpl.php делает.

2014-02 ОБНОВЛЕНИЕ: обратите внимание, что это вопрос / ответ 2009 года. В Drupal 8 вы просто не хотите получать доступ к гипотетической базе данных SQL (и в любом случае не делали бы это так, но использовали бы DBTNG), а просто использовали что-то вроде:

if ($comment = entity_load('comment', $cid)) {
  return entity_view($comment, $view_mode);
}
function print_comment($cid) {
  $sql = "SELECT * FROM {comments} WHERE cid = %d";
  if ($comment = db_fetch_object(db_query($sql, $cid))) {
    $node = node_load($comment->nid);
    возвращаемая тема ('comment', $comment, $node);
  }
}

Нет смысла использовать какой-либо sql для этого, достаточно всего двух вызовов api-функций drupal.

function print_comment($cid) 
{
    $comment = _comment_load($cid);
    return theme('comment',$comment);
}
Другие вопросы по тегам