Как напечатать один комментарий в drupal? - PullRequest
2 голосов
/ 21 марта 2009

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

Ответы [ 3 ]

3 голосов
/ 21 марта 2009

Предложение Итона является хорошим (за исключением того, что оно {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);
}
3 голосов
/ 21 марта 2009
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);
    return theme('comment', $comment, $node);
  }
}
2 голосов
/ 29 января 2010

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

function print_comment($cid) 
{
    $comment = _comment_load($cid);
    return theme('comment',$comment);
}
...