Türe göre düğüm sayısı [kapalı]


39

Belirli bir düğüm türünün toplam sayısını görüntülememe izin veren bir pasaj arıyorum, örneğin "Sayfalar = 167" veya "Ürünler = 10630."

Bunu başarmak için hangi kodu kullanmalıyım?

Yanıtlar:


34

Belirli bir içerik türü için düğüm sayısını döndürecek bir işlev:

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();
}

Bu kodu temanızda kullanmak için, işlevi içine ekleyin template.phpve ardından işlevi şu şekilde çağırabilirsiniz:

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

56

Bunu yapmak için Views modülünü kullanabilirsiniz.

  1. Yeni görünüm oluşturun, sıralama seçeneklerini, alanları ve diğer varsayılan ayarları kaldırın
  2. "İçerik: Tür" için bir alan ekle
  3. Sağdaki "gelişmiş" bölümünü genişletin ve "Toplamayı kullan" ı "Evet" olarak ayarlayın
  4. "İçerik: Tür" için başka bir alan ekle
  5. İkinci "İçerik: Tür" alanında "Toplama ayarları" nı tıklayın.
  6. Toplama türünü "say" olarak ayarlayın
  7. İkinci "İçerik: Tür" artık "COUNT (İçerik: Tür)" gibi görünmeli

Bu olmalı! Gerekirse, alan etiketleri ve satır stili ayarları gibi bazı ayarları da yapın.

İşte böyle bir görünümün dışa aktarımıdır, böylece kolayca içe aktarabilir ve deneyebilirsiniz:

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

Bu sunucu performansı için "ağır" görünüyor.
Fedir RYKHTIK 22:11

7
@Fedir, eğer öyle düşünüyorsan, Views modülü hakkında daha fazla şey öğrenmen gerekiyor. Bu sadece dışa aktarılan konfigürasyondur ve bir nesnede ayar özellikleri sunucuda hiç ağır değildir. Görünümler modülünün bir bütün olarak özel bir bloktan daha fazla kaynak kullanacağı doğrudur, ancak en küçük paylaşılan sunucunun başaramayacağı bir şey değildir. Sitenizdeki görünümleri kullanmanın iyi nedenleri vardır: bakım, güvenlik, daha hızlı geliştirme ve önbellekleme seçenekleri. Özel kod da iyidir, ancak yalnızca dışa aktarma 81 satır aldığından Görünümleri atmayın.
marcvangend

3
Kabul ediyorum, Views modülü birçok durumda oldukça faydalı olabilir. Geçerli görev için, nesneyi saymak için daha açık olacağı gibi basit bir sorgu kullanacağım. Daha hızlı yapabildiğim yerlere gitmeyi sevmiyorum.
Fedir RYKHTIK

11

Tercih edilen, programatik yol, EntityFieldQuery sınıfını kullanmaktır . EntityFieldQuery'nin neden db_query () işlevinden daha üstün olduğunu öğrenin .

İşte Blog türündeki Düğümleri saymanın bir örneği.

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

Benzer soruya bakınız .


7

Bunu EntityFieldQuery kullanarak yaptım.

$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 ne yazık ki veritabanlarından tüm düğümleri almak zorunda kalacak ve daha sonra kaç tane bulunduğunu hesaplayacaktır. Yani bu gerçekten çok ağır. Görünümleri kullanın veya üstündeki SQL cevapları çok daha hafiftir.
Mario Awad

5

Drush'u kullanmak basit ve hızlıdır.

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'

Bu şuna benzer bir çıktı verir:

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

Ve sonra belirli bir türe göre filtreleme yapmak istiyorsanız, şunun gibi grep kullanın:

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

İlgi duyan herkes için, başka bir çözüm kullanmaktır countQuery yöntemini SelectQuery (aracılığıyla sınıfının db_select ).

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

Ancak, timofey tarafından yayınlanan EntityFieldQuery çözümünü tercih ediyorum. Bunu yalnızca makul derecede mantıklı bir alternatif olarak sunuyorum.


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;

Bu sorguyu kodunuzda kullanın


0

Düğüm Türü sayım modülü gerektirir olarak aynı şeyi.

Bu modül, belirli bir içerik türündeki düğüm sayısını ve ayrıca belirli rol türündeki Kullanıcı sayısını göstermek için kullanılır.

Bu modül sadece istatistiksel ve geliştirme amaçlı kullanılacaktır.


0

Görünümler modülünü kullanma hakkındaki cevabın bir varyasyonu olarak , Grafikler modülüyle birlikte gelen görünümü "kullanabilirsiniz" . Basitçe kurun / etkinleştirin, ek bir konfigürasyon, kodlama vb. Gerekmez. Kullanıma Hazır Örneklerinde yer alan bu görünümle ilgili daha fazla ayrıntı (bu bağlantıdan alıntı):

... charts/examples/viewssitenizde gezin. Daha sonra ayrıca bir tablo ekranını izleyen bir sütun grafiği ve bir pasta grafiği görmelisiniz. Hem grafikler hem de tablo ekranı, mevcut içerik türlerinin her biri için toplam düğüm sayısı hakkında veri içerir.

Notlar:

  • Bonus olarak, tablo biçiminden ayrı olarak, düğüm türlerini içerik türüne göre görselleştirmek için bir grafik de alırsınız.
  • Görünümü beğendiyseniz ve / veya istediğinize yakınsa, görünümü de klonlayabilir ve ardından Grafikler modülünü yeniden devre dışı bırakabilirsiniz.

Açıklama: Bu modülün sahibiyim,
umarım bu sitenin kendini tanıtma politikasını ihlal etmez .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.