유형별 노드 수 [닫힘]


39

"Pages = 167"또는 "Products = 10630"과 같은 특정 노드 유형에 대한 총 수를 표시 할 수있는 스 니펫을 찾고 있습니다.

이것을 달성하기 위해 어떤 코드를 사용해야합니까?

답변:


34

다음은 특정 컨텐츠 유형에 대한 노드 수를 리턴하는 함수입니다.

function YOURTHEME_get_node_count($content_type) {
  $query = 'SELECT COUNT(*) ' .
           'FROM {node} n ' .
           'WHERE n.type = :type';
  return db_query($query, array(
      ':type' => $content_type
  ))->fetchField();
}

테마에서이 코드를 사용하려면 함수를 함수에 추가하면 template.php다음과 같이 함수를 호출 할 수 있습니다.

echo 'Pages: ' . YOURTHEME_get_node_count('page');
echo 'Products: ' . YOURTHEME_get_node_count('product');

56

모듈을 사용 하여이 작업을 수행 할 수 있습니다 .

  1. 새보기 작성, 정렬 옵션, 필드 및 기타 기본 설정 제거
  2. "내용 : 유형"에 대한 필드 추가
  3. 오른쪽의 "고급"부분을 펼치고 "집계 사용"을 "예"로 설정하십시오.
  4. "내용 : 유형"에 대한 다른 필드 추가
  5. 두 번째 "콘텐츠 : 유형"필드에서 "집계 설정"을 클릭하십시오.
  6. 집계 유형을 "count"로 설정
  7. 두 번째 "Content : Type"은 이제 "COUNT (Content : Type)"과 같아야합니다.

그게 다야! 필요한 경우 필드 레이블 및 행 스타일 설정과 같은 추가 설정을 조정하십시오.

이러한 뷰를 내 보내면 쉽게 가져 와서 사용해 볼 수 있습니다.

$view = new view;
$view->name = 'nodecounts';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'node';
$view->human_name = 'Node counts';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */

/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'Node counts';
$handler->display->display_options['group_by'] = TRUE;
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['query']['options']['query_comment'] = FALSE;
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'none';
$handler->display->display_options['style_plugin'] = 'default';
$handler->display->display_options['row_plugin'] = 'fields';
$handler->display->display_options['row_options']['inline'] = array(
  'type_1' => 'type_1',
  'type' => 'type',
);
$handler->display->display_options['row_options']['separator'] = ': ';
$handler->display->display_options['row_options']['hide_empty'] = 0;
$handler->display->display_options['row_options']['default_field_elements'] = 1;
/* Field: Content: Type */
$handler->display->display_options['fields']['type_1']['id'] = 'type_1';
$handler->display->display_options['fields']['type_1']['table'] = 'node';
$handler->display->display_options['fields']['type_1']['field'] = 'type';
$handler->display->display_options['fields']['type_1']['label'] = '';
$handler->display->display_options['fields']['type_1']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['external'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['trim_whitespace'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['type_1']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['type_1']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['trim'] = 0;
$handler->display->display_options['fields']['type_1']['alter']['html'] = 0;
$handler->display->display_options['fields']['type_1']['element_label_colon'] = FALSE;
$handler->display->display_options['fields']['type_1']['element_default_classes'] = 1;
$handler->display->display_options['fields']['type_1']['hide_empty'] = 0;
$handler->display->display_options['fields']['type_1']['empty_zero'] = 0;
$handler->display->display_options['fields']['type_1']['hide_alter_empty'] = 1;
$handler->display->display_options['fields']['type_1']['link_to_node'] = 0;
$handler->display->display_options['fields']['type_1']['machine_name'] = 0;
/* Field: COUNT(Content: Type) */
$handler->display->display_options['fields']['type']['id'] = 'type';
$handler->display->display_options['fields']['type']['table'] = 'node';
$handler->display->display_options['fields']['type']['field'] = 'type';
$handler->display->display_options['fields']['type']['group_type'] = 'count';
$handler->display->display_options['fields']['type']['label'] = '';
$handler->display->display_options['fields']['type']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['type']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['type']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['type']['alter']['external'] = 0;
$handler->display->display_options['fields']['type']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['type']['alter']['trim_whitespace'] = 0;
$handler->display->display_options['fields']['type']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['type']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['type']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['type']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['type']['alter']['trim'] = 0;
$handler->display->display_options['fields']['type']['alter']['html'] = 0;
$handler->display->display_options['fields']['type']['element_label_colon'] = FALSE;
$handler->display->display_options['fields']['type']['element_default_classes'] = 1;
$handler->display->display_options['fields']['type']['hide_empty'] = 0;
$handler->display->display_options['fields']['type']['empty_zero'] = 0;
$handler->display->display_options['fields']['type']['hide_alter_empty'] = 1;
$handler->display->display_options['fields']['type']['separator'] = '';
$handler->display->display_options['fields']['type']['format_plural'] = 0;

/* Display: Block */
$handler = $view->new_display('block', 'Block', 'block');

서버 성능이 "무거운"것으로 보입니다.
Fedir RYKHTIK

7
@Fedir, 그렇게 생각하면 Views 모듈에 대해 더 많이 알아야합니다. 이것은 방금 내 보낸 구성이며 객체의 속성 설정은 서버에서 전혀 무겁지 않습니다. Views 모듈 전체가 커스텀 블록보다 더 많은 리소스를 사용한다는 것은 사실이지만 가장 작은 공유 서버가 처리 할 수 ​​없었던 것은 아닙니다. 유지 관리 성, 보안, 빠른 개발 및 캐싱 옵션과 같이 사이트 전체에서보기를 사용해야 할 이유가 있습니다. 사용자 정의 코드도 괜찮지 만 내보내기에는 81 줄이 걸리기 때문에 뷰를 버리지 마십시오.
marcvangend

3
Views 모듈은 많은 상황에서 매우 유용 할 수 있습니다. 현재 작업의 경우 간단한 쿼리를 사용하여 객체를 더 가볍게 계산합니다. 나는 그것을 더 빨리 할 수있는 곳에서 오버 헤드를 좋아하지 않습니다.
Fedir RYKHTIK

11

프로그래밍 방식으로 선호되는 방법은 EntityFieldQuery 클래스 를 사용하는 입니다. EntityFieldQuery가 db_query ()보다 우수한 이유를 학습하십시오 .

다음은 블로그 유형의 노드를 계산하는 예입니다.

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node') // grab nodes
->entityCondition('bundle', 'blog') // filter by blog type
->propertyCondition('status', 1) // filter by published
->count(); // count

$result = $query->execute();

비슷한 질문을 참조하십시오 .


7

EntityFieldQuery를 사용 하여이 작업을 수행했습니다.

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
    /* this is the content type machine name */
    ->entityCondition('bundle', 'product')
    /* You can set extra properties using fieldCondition and properties with propertyCondition */
    ->fieldCondition('field_product_status', 'tid', key(taxonomy_get_term_by_name('New')))
    ;

$result = $query->execute();
if (isset($result['node'])){
    $count_of_new_product_nodes = count($result['node']); 
}

3
불행히도 EntityFieldQuery는 데이터베이스에서 모든 노드를 가져 와서 몇 개가 있는지 계산해야합니다. 그래서 이것은 정말로 무겁습니다. 훨씬 가벼운 뷰 또는 SQL 응답을 사용하십시오.
마리오 Awad

5

Drush 사용은 간단하고 빠릅니다.

drush sqlq 'select count(node.nid) as node_count, node_type.type from node inner join node_type on node.type = node_type.type group by node_type.type'

이것은 다음과 유사한 출력을 제공합니다.

node_count  type
17  category_2012
20  category_2013
19  category_2014
3   competition
19  entry_2012_breakthrough
89  entry_2012_digitalother
50  entry_2012_directdirect
19  entry_2012_filmsecscn
17  entry_2012_insights
12  entry_2012_outdoor
31  entry_2012_promo
19  entry_2013_breakthrough
100 entry_2013_digitalother
40  entry_2013_directdirect

그런 다음 특정 유형으로 필터링하려면 다음과 같이 grep을 사용하십시오.

drush sqlq 'select count(node.nid) as node_count, node_type.type from node inner join node_type on node.type = node_type.type group by node_type.type' | grep 2014

3

관심있는 사람이라면 다른 솔루션은 SelectQuery 클래스 의 countQuery 메소드 를 사용하는 입니다 ( db_select 사용 ).

$count = db_select('node')
  ->condition('type', 'some-type')
  ->countQuery()->execute()->fetchField();

그러나 timofey가 게시 한 EntityFieldQuery 솔루션을 선호합니다. 나는 이것을 합리적으로 합리적인 대안으로 제공하고 있습니다.


1
SELECT
  COUNT({node}.nid) AS node_count,
  {node_type}.type
FROM {node}
  INNER JOIN {node_type} ON {node}.type = {node_type}.type
GROUP BY {node_type}.type;

이 쿼리를 코드에서 사용하십시오


0

노드 유형 카운트 모듈은 필요에 따라 동일한 작업을 수행.

이 모듈은 특정 컨텐츠 유형의 노드 수와 특정 역할 유형의 사용자 수를 표시하는 데 사용됩니다.

이 모듈은 통계 및 개발 목적으로 만 사용됩니다.


0

보기 모듈 사용에 대한 답변을 변형 하여 차트 모듈 과 함께 제공되는보기를 "사용"할 수 있습니다 . 추가 구성, 코딩 등이 필요없이 간단히 설치 / 활성화하십시오. 이보기에 대한 자세한 내용은 기본 제공 예 (이 링크에서 인용)에 포함되어 있습니다.

... charts/examples/views귀하의 사이트로 이동 하십시오. 그러면 세로 막 대형 차트와 원형 차트가 표시되고 그 뒤에 테이블 형식의 표시가 나타납니다. 차트와 테이블 디스플레이 모두 사용 가능한 각 컨텐츠 유형의 총 노드 수에 대한 데이터를 포함합니다.

노트:

  • 보너스로, 표 형식 외에도 컨텐츠 유형별로 노드 수를 시각화하는 차트가 제공됩니다.
  • 보기가 마음에 들거나 원하는 것에 가깝다면보기를 복제 한 다음 차트 모듈을 다시 비활성화하면됩니다.

공개 : 저는이 모듈의 관리자이며, 이것이 자체 프로모션에
대한 사이트의 정책을 위반하지 않기를 바랍니다 .

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