ビューで、使用された回数に基づいて分類用語をどのようにソートできますか?


8

私は、トップ10の最も人気のある分類用語(タグ)をリストするビューを作成しています。現在、すべての用語を返すビューがあり、ビューを10に制限できますが、人気度(つまり、すべてのノードで使用される回数)で用語を並べ替える方法を見つけることができません。

誰かこれの経験がありますか?

回答:


9
  1. 新しいビューを作成する
  2. 分類への制限「すべての用語の分類を表示する」
  3. 関係「分類用語:用語を含むコンテンツ」を追加します
  4. 集計を使用する
  5. フィールド「コンテンツ:タイトル」を追加します
  6. 集計タイプ「カウント」
  7. ラベルを「使用回数」などに変更します
  8. ソート基準「コンテンツ:タイトル」を追加します
  9. 集計タイプ「カウント」
  10. 好きなように並べ替え

次のようになります。

景色 結果


私はこれが正しく機能すると思います。投票してください
ユセフ2016年

Drupal 8でも動作します!
Insasse

SEから通知を受け取り、7年前から自分の回答を読んで、「すごい、何を言っているの?」
saadlulu

0

ビュー3には(非常にベータ版の)「グループ化」機能があります。これを使用して、カウントフィールドを注文できるはずです。

私はそれが動作することを保証しませんが、それはおそらく試してみる価値があります。


何度も試してみましたが、うまく動作しませんでした。:-(
Camsoft

それを聞いて申し訳ありませんが、私はそれを過去に何かで機能させたことがありますが、CCKフィールドを使用しないことによって制限されました。それはそこに到達していますが、まだです。
ジェレミー・フレンチ

「非常にベータ版」は、これを回答と見なさないようにするのに十分なはずです:) -1回答が欠陥を持っていることが(まだ)わかっているソリューションを指しているため、不安定であり、確実に機能せず機能しません。 。
バーク

ビュー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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.