¿Cómo puede ordenar los términos de taxonomía en función de la cantidad de veces que se usa, en una vista?

8

Estoy creando una vista que enumera los 10 términos de taxonomía (etiquetas) más populares. Actualmente tengo la vista que devuelve todos los términos y puedo limitar la vista a 10, pero no puedo resolver cómo ordenar los términos por popularidad (es decir, la cantidad de veces que se usa en todos los nodos).

Alguien tiene experiencia en esto?

Camsoft
fuente

Respuestas:

9
  1. Crea una nueva vista
  2. límite a las taxonomías "mostrar taxonomías del término todos"
  3. Agregar una relación "Término de taxonomía: contenido con término"
  4. Usar agregación
  5. Agregar campo "Contenido: Título"
  6. Tipo de agregación "Count"
  7. Cambie la etiqueta a algo así como "número de veces que se usa"
  8. Añadir criterios de clasificación "Contenido: Título"
  9. Tipo de agregación "Count"
  10. Ordena lo que quieras

Debe tener un aspecto como este:

la vista el resultado

saadlulu
fuente
Creo que esto funciona correctamente, vota
Yusef
¡Todavía funciona con Drupal 8!
Insasse
ese momento incómodo cuando recibes una notificación de SE y lees tu propia respuesta de hace 7 años y dices "wow, ¿qué estoy diciendo?"
saadlulu
0

Views 3 tiene una función (muy beta) "agrupar por"; debería poder usar esto y ordenar un campo de conteo.

No garantizaría que funcione, pero probablemente valga la pena intentarlo.

Jeremy French
fuente
Lo intenté y lo intenté y no pude hacerlo funcionar. :-(
Camsoft
Lamento escuchar eso, he tenido que trabajar con algo en el pasado, pero estaba limitado por no usar campos CCK. Está llegando allí, pero aún no.
Jeremy French
El "muy beta" debería ser suficiente para no considerar esto como una respuesta :) -1, por el hecho de que la respuesta apunta a una solución que (todavía) se sabe que tiene fallas, es inestable y seguramente no funcionará, entonces funcionará .
berkes
todavía es útil para mí saber que Views 3 debería poder manejarlo pronto. Gracias por las aclaraciones!
Uwe
0

Al final, creé mi propio módulo personalizado para obtener los términos de la base de datos y agruparlos / ordenarlos.

Tenga en cuenta que he modificado ligeramente el código a continuación para publicar y no he probado la versión modificada. También vale la pena señalar que fue escrito para un sitio usando PostgreSQL, pero debería funcionar con MySQL.

/**
  * Implements hook_block_info().
  */
function MYMODULE_block_info() {

  $blocks['poptags'] = array(
    'info' => t('Most Popular Tags'),
    'cache' => DRUPAL_NO_CACHE
  );

  return $blocks;
}

/**
  * Implements hook_block_view().
  */
function MYMODULE_block_view($delta = '') {
  $block = array();

  switch ($delta) {
    case 'poptags':
      $block['subject'] = t('Most Popular Tags');
      $block['content'] = _MYMODULE_popular_terms();
      break;
  }
  return $block;
}

function _MYMODULE_popular_terms() {

    $vocabId = 1;

    $links = array();
    $results = db_query_range('SELECT taxonomy_term_data.tid, taxonomy_term_data.name, count(taxonomy_term_data.tid) AS times_used FROM taxonomy_term_data INNER JOIN taxonomy_index ON taxonomy_term_data.tid = taxonomy_index.tid WHERE taxonomy_term_data.vid = :vid GROUP BY taxonomy_term_data.tid, taxonomy_term_data.name ORDER BY times_used DESC', 0, 10, array(':vid' => $vocabId));
    foreach ($results as $term) {
        $links['term-link-' . db_escape_field($term->name)] = array('title' => $term->name, 'href' => drupal_get_path_alias('taxonomy/term/' . $term->tid));
    }

    return theme('links', array('links' => $links, 'attributes' => array('class' => 'term-links')));
}

No olvides cambiar MYMODULEel nombre de tu módulo. Por último, cambie la $vocabId = 1línea de la _MYMODULE_popular_termsfunción al vid (id. De vocabulario) del vocabulario del que desea enumerar los términos.

Tenga en cuenta que esto es solo para Drupal 7, aunque no llevaría mucho portarlo a Drupal 6.

Camsoft
fuente
0

Podrías extraer los datos de tagadelic .

$output = '';
$vids = array(1, 2, 3, 4); #Taxonomy vocabulary-ids you want to be included.
$top_tags = tagadelic_get_weighted_tags($vids, 6, 10);
foreach ($terms as $term) {
  $weight = $term->weight;
  $output .= l($term->name, drupal_get_path_alias('taxonomy/term/' . $term->tid), array(
    'attributes' => array(
      'class' => array("tagadelic", "level$weight"),
      'rel' => 'tag',
      'title'  => $term->description,
      )
    )
  ) . " \n";
}

return $output;

El único inconveniente es que tagadelic agrega algo de sobrecarga menor para calcular el "peso", generalmente para presentar los tamaños de etiqueta, que no utilizará.

Lo bueno es que obtienes el almacenamiento en caché de forma gratuita.

Berkes
fuente
Creo que mi solución probablemente tenga la menor sobrecarga, ya que es solo una consulta simple. También la pregunta era con respecto a Drupal7 y Tagadelic no tiene una versión d7.
Camsoft