2009-03-21 1 views
2

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

+0

Каков контекст этого? Вы хотите, чтобы страница была просто комментарием? Блок? Сделать его частью шаблона страницы? Печать одного комментария в шаблоне узла? –

ответ

3

предложение компании Eaton хорошо (за исключением его {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); 
    } 
} 

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

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

if ($comment = entity_load('comment', $cid)) { 
    return entity_view($comment, $view_mode); 
} 
+0

Hah. Благодарим за замечание о комментариях и комментариях. Я вскрыл api.drupal.org и не заметил, что я смотрю на версию кода D7 - имя таблицы изменилось на единицу в новой версии dev. – Eaton

+0

Кроме того, вы получите некоторые уведомления PHP, если объект объекта не передан - тип $ node-> используется для построения возможных параметров шаблона (например, comment-story.tpl.php) в phptemplate \ _preprocess по умолчанию \ _comment. – Eaton

+0

'phptemplate_preprocess_comment' не будет использоваться при вызове темы ('my_special_comment_formatting'). Но хороший улов для 'theme ('comment')'! Я проверил только шаблон, а не функцию препроцесса. – FGM

3
 
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

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

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