web-dev-qa-db-fra.com

Nombre de nœuds par type

Je recherche un extrait qui me permet d'afficher le nombre total pour un type de nœud spécifique, par exemple "Pages = 167" ou "Produits = 10630".

Quel code dois-je utiliser pour y parvenir?

39
Diane

Voici une fonction qui renverra le nombre de nœuds pour un type de contenu spécifique:

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

Pour utiliser ce code dans votre thème, ajoutez la fonction dans votre template.php et ensuite vous pouvez appeler la fonction comme ceci:

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

Vous pouvez utiliser le module Views pour ce faire.

  1. Créez une nouvelle vue, supprimez les options de tri, les champs et autres paramètres par défaut
  2. Ajoutez un champ pour "Contenu: Type"
  3. Développez la partie "avancée" à droite et définissez "Utiliser l'agrégation" sur "Oui"
  4. Ajoutez un autre champ pour "Contenu: Type"
  5. Dans le deuxième champ "Contenu: Type", cliquez sur "Paramètres d'agrégation"
  6. Définissez le type d'agrégation sur "count"
  7. Le deuxième "Content: Type" devrait maintenant ressembler à "COUNT (Content: Type)"

Ça devrait être ça! Si nécessaire, ajustez d'autres paramètres tels que les étiquettes de champ et les paramètres de style de ligne.

Voici une exportation d'une telle vue, vous pouvez donc facilement l'importer et l'essayer:

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

La méthode programmatique préférée consiste à utiliser classe EntityFieldQuery . Découvrez pourquoi EntityFieldQuery est supérieur à db_query () .

Voici un exemple de comptage des nœuds de type Blog.

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

Voir question similaire .

11
timofey.com

J'ai fait cela en utilisant 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']); 
}
7
Coomie

L'utilisation de Drush est simple et rapide.

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'

Cela donne une sortie similaire à:

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

Et puis si vous voulez filtrer par un type spécifique, utilisez simplement grep comme ceci:

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
5
Patoshi パトシ

Pour toute personne intéressée, une autre solution consiste à utiliser la méthode countQuery de la classe SelectQuery (via db_select ).

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

Cependant, je préfère la solution EntityFieldQuery publiée par timofey. Je ne propose cela que comme une alternative raisonnable.

3
tomcant
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;

Utilisez cette requête dans votre code

1
Adi

En guise de variante de la réponse concernant l'utilisation du module Vues , vous pouvez "utiliser" la vue fournie avec le module Graphiques . Il suffit de l'installer/l'activer, aucune configuration supplémentaire, codage, etc. n'est nécessaire. Quelques détails supplémentaires sur cette vue, inclus dans les Exemples prêts à l'emploi (citation de ce lien):

... aller vers charts/examples/views sur votre site. Vous devriez alors voir un graphique à colonnes et un graphique à secteurs, qui sont également suivis d'un affichage tabulaire. Les graphiques et l'affichage du tableau contiennent des données sur le nombre total de nœuds pour chacun des types de contenu disponibles.

Remarques:

  • En prime, outre le format tabulaire, vous obtenez également un graphique pour visualiser le nombre de nœuds par type de contenu.
  • Si vous aimez la vue et/ou qu'elle est proche de ce que vous voulez, vous pouvez également cloner la vue, puis désactiver à nouveau le module Graphiques.

Divulgation: je suis le mainteneur de ce module,
J'espère que cela ne viole pas le site politique d'auto-promotion .

0
Pierre.Vriens

Le module Node Type count fait la même chose que vous le souhaitez.

Ce module est utilisé pour afficher un nombre de nœuds d'un type de contenu particulier et également le nombre d'utilisateurs d'un type de rôle particulier.

Ce module sera utilisé à des fins statistiques et de développement uniquement.

0
DEVARAJ JOHNSON