प्रकार द्वारा नोड्स की गणना [बंद]


39

मैं एक स्निपेट की तलाश में हूं जो मुझे एक विशिष्ट नोड प्रकार के लिए कुल गणना प्रदर्शित करने की अनुमति देता है, जैसे "पृष्ठ = 167" या "उत्पाद = 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. "टाइप" करने के लिए एकत्रीकरण प्रकार सेट करें
  7. दूसरी "सामग्री: प्रकार" को अब "COUNT (सामग्री: प्रकार)" जैसा दिखना चाहिए

यही होना चाहिए! यदि आवश्यक हो, तो फ़ील्ड लेबल और पंक्ति शैली सेटिंग्स जैसी कुछ और सेटिंग्स समायोजित करें।

यहां इस तरह के दृश्य का निर्यात होता है, जिससे आप इसे आसानी से आयात कर सकते हैं और इसे आज़मा सकते हैं:

$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');

सर्वर प्रदर्शन के लिए यह "भारी" लग रहा है।
फेडिर RYKHTIK

7
@ फ़ेडर, अगर आपको लगता है कि, आपको व्यू मॉड्यूल के बारे में अधिक जानने की आवश्यकता है। यह केवल निर्यात कॉन्फ़िगरेशन है और किसी ऑब्जेक्ट पर गुण सेट करना सर्वर पर बिल्कुल भी भारी नहीं है। यह सच है कि एक पूरे के रूप में दृश्य मॉड्यूल एक कस्टम ब्लॉक की तुलना में अधिक संसाधनों का उपयोग करेगा, लेकिन यह कुछ भी नहीं है जो सबसे छोटा साझा सर्वर संभाल नहीं सकता है। आपकी साइट पर विचारों का उपयोग करने के अच्छे कारण हैं: स्थिरता, सुरक्षा, तेजी से विकास और कैशिंग विकल्प। कस्टम कोड भी ठीक है, लेकिन दृश्य को मत छोड़ें क्योंकि एक निर्यात में 81 लाइनें लगती हैं।
marcvangend

3
मैं सहमत हूं, दृश्य मॉड्यूल कई स्थितियों में काफी उपयोगी हो सकता है। वर्तमान कार्य के लिए, मैं ऑब्जेक्ट को गिनने के लिए सरल क्वेरी का उपयोग करूंगा, क्योंकि यह हल्का होगा। मैं ओवरहेड करना पसंद नहीं करता जहाँ मैं इसे तेजी से कर सकता था।
फेडिर 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 दुर्भाग्य से डेटाबेस से सभी नोड्स लाने होंगे और फिर गिनेंगे कि कितने हैं। तो यह वास्तव में भारी है। ऊपर के लाइक्स या एसक्यूएल उत्तरों का उपयोग करें वे बहुत हल्के हैं।
मारियो अवध

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 वर्ग ( db_select के माध्यम से ) की काउंटिविट विधि का उपयोग करना ।

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

हालाँकि, मुझे टिमोफी द्वारा पोस्ट किया गया 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अपनी साइट पर नेविगेट करें। फिर आपको एक कॉलम चार्ट और एक पाई चार्ट देखना चाहिए, जिसके बाद एक सारणीबद्ध प्रदर्शन भी होता है। दोनों चार्ट और टेबल डिस्प्ले में उपलब्ध सामग्री प्रकारों में से प्रत्येक के लिए कुल नोड्स के बारे में डेटा है।

टिप्पणियाँ:

  • एक बोनस के रूप में, सारणीबद्ध प्रारूप के अलावा, आपको सामग्री प्रकार द्वारा नोड्स की संख्या की कल्पना करने के लिए एक चार्ट भी मिलता है।
  • यदि आपको दृश्य पसंद है, और / या यह वह है जो आप चाहते हैं, तो आप दृश्य को क्लोन भी कर सकते हैं, और फिर चार्ट चार्ट को फिर से अक्षम कर सकते हैं।

प्रकटीकरण: मैं इस मॉड्यूल का अनुचर
हूं , मुझे आशा है कि यह स्व-प्रचार पर साइट की नीति का उल्लंघन नहीं करता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.