Como você pode classificar os termos de taxonomia com base no número de vezes usado, em uma exibição?

8

Estou criando uma exibição que lista os 10 principais termos de taxonomia mais populares (tags). Atualmente, tenho a visualização retornando todos os termos e posso limitar a visualização a 10, mas não sei como ordenar os termos por popularidade (ou seja, o número de vezes usado em todos os nós).

Alguém tem experiência nisso?

Camsoft
fonte

Respostas:

9
  1. Crie uma nova visão
  2. limite para taxonomias "mostrar taxonomias do termo todos"
  3. Adicionar um relacionamento "Termo de taxonomia: conteúdo com termo"
  4. Usar agregação
  5. Adicione o campo "Conteúdo: Título"
  6. Tipo de agregação "Contagem"
  7. Altere o rótulo para algo como "número de vezes usado"
  8. Adicionar critérios de classificação "Conteúdo: título"
  9. Tipo de agregação "Contagem"
  10. Classifique como quiser

deve ficar assim:

a vista o resultado

saadlulu
fonte
Eu acho que isso funcionou corretamente, vote
013 Yusef
Ainda funciona com o Drupal 8!
Insasse 17/05/19
aquele momento constrangedor em que você recebe uma notificação da SE e lê sua própria resposta há 7 anos e diz "uau, o que estou dizendo?"
Saadlulu 17/05/19
0

A vista 3 possui um recurso "agrupar por" (muito beta); você poderá usá-lo e solicitar um campo de contagem.

Eu não garantiria que funcione, mas provavelmente vale a pena tentar.

Jeremy French
fonte
Eu tentei e tentei e não consegui fazê-lo funcionar. :-(
Camsoft
Lamento ouvir isso, eu já trabalhei com algo no passado, mas estava limitado por não usar os campos CCK. Está chegando lá, mas ainda não.
Jeremy French
O "muito beta" deve ser suficiente para não considerar isso como uma resposta :) -1, pelo fato de que a resposta aponta para uma solução que ainda é conhecida por apresentar falhas, é instável e certamente não funcionará, e sim funcionará. .
precisa
ainda é útil saber que o Views 3 deve ser capaz de lidar com isso em breve. Obrigado pelos esclarecimentos!
Uwe
0

No final, criei meu próprio módulo personalizado para obter os termos do banco de dados e agrupá-los / classificá-los.

Observe que modifiquei ligeiramente o código abaixo para postar e não testei a versão modificada. Também vale a pena notar que ele foi escrito para um site usando o PostgreSQL, mas deve funcionar com o 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')));
}

Não esqueça de mudar MYMODULEpara o nome do seu módulo. Por fim, altere a $vocabId = 1linha da _MYMODULE_popular_termsfunção para o vid (ID do vocabulário) do vocabulário no qual você deseja listar os termos.

Observe que isso é apenas para o Drupal 7, embora não demore muito para portá-lo para o Drupal 6.

Camsoft
fonte
0

Você pode extrair os dados do 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;

A única desvantagem é que o tagadelic adiciona uma pequena sobrecarga para calcular o "peso", geralmente para apresentar os tamanhos dos tags, que você não usará.

A vantagem é que você obtém o cache gratuitamente.

berkes
fonte
Acho que minha solução provavelmente tem o mínimo de sobrecarga, pois é apenas uma consulta simples. Também a pergunta era sobre Drupal7 e Tagadelic não tem uma versão d7.
Camsoft 19/04/11