it-swarm-es.com

Recuento de nodos por tipo

Estoy buscando un fragmento que me permita mostrar el recuento total de un tipo de nodo específico, p. "Páginas = 167" o "Productos = 10630."

¿Qué código debo usar para lograr esto?

39
Diane

Aquí hay una función que devolverá el número de nodos para un tipo de contenido específico:

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

Para usar este código en su tema, agregue la función en su template.php y luego puedes llamar a la función así:

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

Puede usar el módulo Vistas para hacer esto.

  1. Cree una nueva vista, elimine las opciones de clasificación, los campos y otras configuraciones predeterminadas
  2. Agregue un campo para "Contenido: Tipo"
  3. Expanda la parte "avanzada" a la derecha y establezca "Usar agregación" en "Sí"
  4. Agregue otro campo para "Contenido: Tipo"
  5. En el segundo campo "Contenido: Tipo", haga clic en "Configuración de agregación"
  6. Establezca el tipo de agregación en "contar"
  7. El segundo "Contenido: Tipo" ahora debería verse como "COUNT (Contenido: Tipo)"

Eso debería ser! Si es necesario, ajuste algunas configuraciones más, como etiquetas de campo y configuraciones de estilo de fila.

Aquí hay una exportación de dicha vista, para que pueda importarla fácilmente y probarla:

$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 forma programática preferida es utilizar clase EntityFieldQuery . Sepa por qué EntityFieldQuery es superior a db_query () .

Aquí hay un ejemplo de contar Nodos de tipo 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();

Ver pregunta similar .

11
timofey.com

Hice esto usando 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

Usar Drush es simple y rápido.

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'

Esto da una salida similar a:

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

Y luego, si desea filtrar por un tipo específico, simplemente use grep de esta manera:

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

Para cualquiera que esté interesado, otra solución es utilizar el método countQuery de la clase SelectQuery (a través de db_select ).

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

Sin embargo, prefiero la solución EntityFieldQuery publicada por timofey. Solo estoy proporcionando esto como una alternativa razonablemente sensata.

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;

Use esta consulta en su código

1
Adi

Como una variación de la respuesta sobre el uso del módulo Vistas , puede "usar" la vista que viene con el módulo Gráficos . Simplemente instálelo/habilítelo, no necesita configuración adicional, codificación, etc. Algunos detalles más sobre esta vista, incluidos en Ejemplos listos para usar (cita de este enlace):

... navegar a charts/examples/views en su sitio. A continuación, debería ver un gráfico de columnas y un gráfico circular, seguidos también de una visualización tabular. Tanto los gráficos como la visualización de la tabla contienen datos sobre el número total de nodos para cada uno de los tipos de contenido disponibles.

Notas:

  • Como beneficio adicional, además del formato tabular, también obtiene un gráfico para visualizar el número de nodos por tipo de contenido.
  • Si le gusta la vista y/o está cerca de lo que desea, también puede clonar la vista y luego deshabilitar nuevamente el módulo Gráficos.

Divulgación: soy el encargado de mantener este módulo,
Espero que esto no viole el sitio política de autopromoción .

0
Pierre.Vriens

El módulo Número de tipo de nodo hace lo mismo que necesita.

Este módulo se utiliza para mostrar un recuento de nodos de un tipo de contenido particular y también un número de usuarios de un tipo de rol particular.

Este módulo se usará solo con fines estadísticos y de desarrollo.

0
DEVARAJ JOHNSON