node.tpl에서 노드 주석 수를 표시하는 방법?


15

손님이 노드에 대한 주석을 볼 수 없도록 사용자 권한을 변경하는 것에 대한 아이디어가있었습니다. 노드에 대한 의견이 있음을 분명히 알 수 있기 때문에 내 사이트 주변의 뷰에는 아무런 문제가 없으며 등록하기가 더 쉽습니다. 문제는 그들이 내 사이트에 직접 노드에 도착했을 때 아무런 의견도 보지 못하고 "약간 쓸모가 없다"고 생각하는 것 같습니다.

노드 아래에 주석의 양을 표시 할 수있는 방법이 있습니까?

답변:


10

template_preprocess_node () 사용하는 것이 좋습니다 .
이것은 D8의 기본 예입니다

function YOUR_THEME_preprocess_node(&$variables) {
  $variables['comment_count'] = $variables['node']->get('YOUR_COMMENT_FIELD')->comment_count;
}

그런 다음 node.html.twig파일 에서 다음 과 같이 사용할 수 있습니다 .

{{ comment_count }}

D6의 기본 예제는 다음과 같습니다. 원하는대로 사용자 정의 할 수 있습니다. 테마 디렉토리에있는 template.php 파일에서 다음과 같이 줄을 따라 무언가를 추가하십시오 (Yourthtem을 테마 이름으로 바꿉니다).

function YOURTHEME_preprocess_node(&$variables) {
  $nid = $variables['node']->nid;
  $variables['num_comments'] = db_result(db_query('SELECT COUNT(cid) AS count FROM {comments} WHERE nid = %d', $nid)) . ' comment(s) on this node';
}

파일을 저장하십시오. 이제 node.tpl.php (또는 동등한 템플릿, node-mycontenttype.tpl.php 등)에 다음을 추가하십시오.

<?php print $num_comments; ?>

주석 수를 저장하고 저장하려는 위치. 캐시를 지우고 변경 사항을보십시오.


나는 7 드루팔하는 template_preprocess_node에 대한 코드를 적응하려고 노력하지만 난이 오류 통지서를 받고 있습니다 : 정의되지 않은 변수를 :에 NUM_COMMENTS 포함 () (라인 116
알렉산더

적응하는 동안 무엇이 바뀌 었습니까? 데이터베이스 쿼리가 아래 @doterobcn에서 제공 한 것과 비슷합니까?
Laxman13

12

node.tpl.php$comment_count 에서 사용할 수 있습니다 .

$type: 노드 유형, 즉 스토리, 페이지, 블로그 등
$comment_count: 노드에 첨부 된 주석 수.


$comment_count사용자가 볼 수있는 댓글 수를 계산 한다고 가정합니다 . 현재 사용자가 주석을 볼 수 없으면 해당 변수는 0으로 설정됩니다.
kiamlaluno

1
예. 더 직접적으로$node->comment_count
artfulrobot 12

4

Drupal 7의 경우 template.php에 대한 쿼리는 다음과 같아야합니다.

$vars['num_comments'] = db_query("SELECT COUNT(cid) AS count FROM {comment} WHERE nid =:nid",array(":nid"=>$vars['nid']))->fetchField();

0

드루팔 8 :

function YOURTHEME_preprocess_node(&$variables) {
  $nid = $variables['node']->nid->value;
  $num_comment = db_query('SELECT comment_count FROM {comment_entity_statistics} WHERE entity_id = ' . $nid)->fetchAssoc();
  $variables['comment_count'] = $num_comment['comment_count'];
}

이제 page.html.twig에서 :

{{ comment_count }}

캐시를 지우고 변경 사항을보십시오.


Drupal API를 사용하여 훨씬 간단하게 할 수있는 일에 대해 db와 같이 db를 쿼리하는 것은 실제로 나쁜 일이다. $ variables [ 'node']-> get ( 'comment')-> comment_count;
ipwa

@ipwa 당신은 그렇지 않으면 해결책이 아니다, 주석 필드 이름을 알고있는 경우
golddragon007

0

Drupal 8에서는 이것을 노드 템플릿에서 직접 사용하십시오 :

{{ node.comment.comment_count }}

작동하려면 노드에 기본 주석 필드 인 기본 주석 필드가 있어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.