在视图中,如何根据使用次数对分类术语进行排序?


8

我正在创建一个视图,其中列出了最流行的10个最常用的分类法术语(标签)。目前,我具有返回所有术语的视图,并且可以将视图限制为10,但是我无法确定如何按受欢迎程度(即,在所有节点上使用的次数)对术语进行排序。

有人对此有经验吗?

Answers:


9
  1. 创建一个新的视图
  2. 对分类法的限制“显示所有术语的分类法”
  3. 添加关系“分类术语:具有术语的内容”
  4. 使用汇总
  5. 添加字段“内容:标题”
  6. 汇总类型“计数”
  7. 将标签更改为“使用次数”
  8. 添加排序条件“内容:标题”
  9. 汇总类型“计数”
  10. 随心所欲

它应该看起来像这样:

风景 结果


我认为这项工作正常进行,请投票
-Yuseferi

仍适用于Drupal 8!
Insasse,

当您收到SE的通知并阅读了7年前的答案后,您会说“哇,我在说什么?”
saadlulu

0

视图3具有(非常beta)“分组依据”功能;您应该可以使用它并订购计数字段。

我不能保证它会起作用,但是可能值得尝试。


我尝试了很多次,但无法正常工作。:-(
Camsoft 2011年

很抱歉听到这个消息,过去我曾经使用过它,但是由于不使用CCK字段而受到限制。它正在到达那里,但还没有。
杰里米·法兰西

“非常beta”应该足以不将其视为答案:) -1,因为答案指向(仍然)已知有缺陷的解决方案是不稳定的,并且肯定会失效然后起作用。
berkes

知道Views 3应该能够尽快处理它对我仍然很有帮助。感谢您的澄清!
uwe 2011年

0

最后,我创建了自己的自定义模块,以从数据库中获取术语并将其分组/排序。

请注意,我已经稍微修改了以下代码以便发布,并且尚未测试修改后的版本。还值得注意的是它是为使用PostgreSQL的站点编写的,但它应与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')));
}

不要忘记更改MYMODULE模块名称。最后$vocabId = 1,将_MYMODULE_popular_terms函数中的行更改为要列出其词汇的词汇的vid(词汇ID)。

请注意,这仅适用于Drupal 7,尽管将其移植到Drupal 6并不需要很多。


0

您可以从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;

唯一的缺点是,tagadelic增加了一些较小的开销来计算“重量”,通常会显示标签的大小,您将不会使用它们。

好处是您可以免费获得缓存。


我认为我的解决方案可能开销最少,因为这只是一个简单的查询。还有一个问题是关于Drupal7,而Tagadelic没有d7版本。
Camsoft
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.