Как можно сортировать термины таксономии по количеству использованных в представлении видов?

8

Я создаю представление, в котором перечислены 10 самых популярных терминов таксономии (теги). В настоящее время у меня есть представление, возвращающее все термины, и я могу ограничить представление до 10, но я не могу понять, как упорядочить термины по популярности (то есть, сколько раз использовалось во всех узлах).

Кто-нибудь имеет опыт этого?

Camsoft
источник

Ответы:

9
  1. Создать новый вид
  2. ограничение таксономии "показать таксономии термина все"
  3. Добавить отношение "Термин таксономии: содержание с термином"
  4. Используйте агрегацию
  5. Добавить поле "Содержание: Заголовок"
  6. Тип агрегации "Граф"
  7. Измените метку на что-то вроде «количество использованных раз»
  8. Добавить критерии сортировки "Содержание: Заголовок"
  9. Тип агрегации "Граф"
  10. Сортируй что хочешь

это должно выглядеть так:

вид результат

saadlulu
источник
Я думаю, что это работает правильно, голосование "за"
Юсефери
Все еще работает с Drupal 8!
Insasse
тот неловкий момент, когда вы получаете уведомление от SE, и вы читаете свой собственный ответ 7 лет назад, и вы говорите "вау, что я говорю?"
saadlulu
0

Представления 3 имеют (очень бета) функцию «группа по»; Вы должны быть в состоянии использовать это и заказать поле подсчета.

Я не гарантирую, что это сработает, но, вероятно, стоит попробовать.

Джереми Френч
источник
Я пытался и пытался и не мог заставить его работать. :-(
Camsoft
Жаль это слышать, я работал с чем-то в прошлом, но был ограничен тем, что не использовал поля CCK. Это там, но пока нет.
Джереми Френч
«Самой беты» должно быть достаточно, чтобы не рассматривать это как ответ :) -1, поскольку тот факт, что ответ указывает на решение, которое (все еще) известно, имеет недостатки, является нестабильным и, скорее всего, не будет работать, то работает ,
Беркес
для меня все еще полезно знать, что Представления 3 скоро смогут справиться с этим. Спасибо за разъяснения!
Уве
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 (идентификатор лексики) словаря, который вы хотите перечислить.

Обратите внимание, что это только для Drupal 7, хотя это не займет много времени, чтобы перенести его на Drupal 6.

Camsoft
источник
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