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


8

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

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

Ответы:


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

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

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


Я думаю, что это работает правильно, голосование "за"
Юсефери

Все еще работает с 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.


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.