답변:
다음은 특정 컨텐츠 유형에 대한 노드 수를 리턴하는 함수입니다.
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');
뷰 모듈을 사용 하여이 작업을 수행 할 수 있습니다 .
그게 다야! 필요한 경우 필드 레이블 및 행 스타일 설정과 같은 추가 설정을 조정하십시오.
이러한 뷰를 내 보내면 쉽게 가져 와서 사용해 볼 수 있습니다.
$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');
프로그래밍 방식으로 선호되는 방법은 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();
비슷한 질문을 참조하십시오 .
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']);
}
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
관심있는 사람이라면 다른 솔루션은 SelectQuery 클래스 의 countQuery 메소드 를 사용하는 것 입니다 ( db_select 사용 ).
$count = db_select('node')
->condition('type', 'some-type')
->countQuery()->execute()->fetchField();
그러나 timofey가 게시 한 EntityFieldQuery 솔루션을 선호합니다. 나는 이것을 합리적으로 합리적인 대안으로 제공하고 있습니다.
보기 모듈 사용에 대한 답변을 변형 하여 차트 모듈 과 함께 제공되는보기를 "사용"할 수 있습니다 . 추가 구성, 코딩 등이 필요없이 간단히 설치 / 활성화하십시오. 이보기에 대한 자세한 내용은 기본 제공 예 (이 링크에서 인용)에 포함되어 있습니다.
...
charts/examples/views
귀하의 사이트로 이동 하십시오. 그러면 세로 막 대형 차트와 원형 차트가 표시되고 그 뒤에 테이블 형식의 표시가 나타납니다. 차트와 테이블 디스플레이 모두 사용 가능한 각 컨텐츠 유형의 총 노드 수에 대한 데이터를 포함합니다.
노트:
공개 : 저는이 모듈의 관리자이며, 이것이 자체 프로모션에
대한 사이트의 정책을 위반하지 않기를 바랍니다 .