Come è possibile ordinare i termini della tassonomia in base al numero di volte utilizzate, in una vista?


8

Sto creando una vista che elenca i primi 10 termini di tassonomia più popolari (tag). Attualmente ho la vista che restituisce tutti i termini e posso limitare la vista a 10 ma non riesco a capire come ordinare i termini per popolarità (cioè il numero di volte utilizzato in tutti i nodi).

Qualcuno ha esperienza di questo?

Risposte:


9
  1. Crea una nuova vista
  2. limite alle tassonomie "mostra tassonomie del termine tutto"
  3. Aggiungi una relazione "Termine tassonomia: contenuto con termine"
  4. Usa aggregazione
  5. Aggiungi campo "Contenuto: Titolo"
  6. Tipo di aggregazione "Conteggio"
  7. Cambia etichetta in qualcosa come "numero di volte utilizzato"
  8. Aggiungi criteri di ordinamento "Contenuto: titolo"
  9. Tipo di aggregazione "Conteggio"
  10. Ordina per quello che ti piace

Dovrebbe sembrare come questo:

la vista il risultato


Penso che funzioni correttamente, vota Up
Yuseferi

Funziona ancora con Drupal 8!
Insasse,

quel momento imbarazzante quando ricevi una notifica da SE e leggi la tua risposta di 7 anni fa e dici "wow, che sto dicendo?"
Saadlulu,

0

Views 3 ha una funzione "raggruppa per" (molto beta); dovresti essere in grado di utilizzare questo e ordinare un campo di conteggio.

Non garantisco che funzioni, ma probabilmente vale la pena provare.


Ho provato e provato e non sono riuscito a farlo funzionare. :-(
Camsoft,

Mi dispiace sentirlo, in passato ho funzionato con qualcosa, ma era limitato dal fatto che non utilizzava i campi CCK. Ci sta arrivando ma non ancora.
Jeremy francese,

La "beta molto" dovrebbe essere sufficiente per non considerare questa come una risposta :) -1, per il fatto che la risposta punta a una soluzione che è (ancora) nota per avere difetti, è instabile e sicuramente non funzionerà quindi funzionerà .
Berkes,

è ancora utile per me sapere che Views 3 dovrebbe essere in grado di gestirlo presto. Grazie per i chiarimenti!
Uwe

0

Alla fine ho creato il mio modulo personalizzato per ottenere i termini dal database e raggrupparli / ordinarli.

Si noti che ho modificato leggermente il codice di seguito per la pubblicazione e non ho testato la versione modificata. Vale anche la pena notare che è stato scritto per un sito usando PostgreSQL, ma dovrebbe funzionare 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')));
}

Non dimenticare di cambiare MYMODULEper il nome del tuo modulo. Infine, modifica la $vocabId = 1riga nella _MYMODULE_popular_termsfunzione nel vid (id del vocabolario) del vocabolario di cui desideri elencare i termini.

Nota che questo è solo per Drupal 7, anche se non ci vorrebbe molto per portarlo su Drupal 6.


0

È possibile estrarre i dati da 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;

L'unico aspetto negativo è che tagadelic aggiunge un lieve sovraccarico per il calcolo del "peso", di solito per presentare le dimensioni dei tag, che non verranno utilizzate.

Il vantaggio è che si ottiene la memorizzazione nella cache gratuitamente.


Penso che la mia soluzione abbia probabilmente il minimo sovraccarico, poiché è solo una semplice query. Anche la domanda riguardava Drupal7 e Tagadelic non ha una versione d7.
Camsoft,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.