Я хочу напечатать отдельный комментарий в drupal на основе его идентификатора комментария. Как я могу это сделать? Google и другие источники ничего мне не дали. Спасибо.Как напечатать единственный комментарий в drupal?
ответ
предложение компании 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);
}
Hah. Благодарим за замечание о комментариях и комментариях. Я вскрыл api.drupal.org и не заметил, что я смотрю на версию кода D7 - имя таблицы изменилось на единицу в новой версии dev. – Eaton
Кроме того, вы получите некоторые уведомления PHP, если объект объекта не передан - тип $ node-> используется для построения возможных параметров шаблона (например, comment-story.tpl.php) в phptemplate \ _preprocess по умолчанию \ _comment. – Eaton
'phptemplate_preprocess_comment' не будет использоваться при вызове темы ('my_special_comment_formatting'). Но хороший улов для 'theme ('comment')'! Я проверил только шаблон, а не функцию препроцесса. – FGM
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); } }
Нет причины, чтобы использовать любой sql, для этого требуется два вызова функции drupal api.
function print_comment($cid)
{
$comment = _comment_load($cid);
return theme('comment',$comment);
}
Каков контекст этого? Вы хотите, чтобы страница была просто комментарием? Блок? Сделать его частью шаблона страницы? Печать одного комментария в шаблоне узла? –