it-swarm-ko.tech

뷰에서 사용 된 횟수에 따라 분류 용어를 어떻게 정렬 할 수 있습니까?

가장 인기있는 분류법 용어 (태그) 10 가지가 나열된보기를 만들고 있습니다. 현재 모든 용어를 반환하는 견해를 가지고 있으며보기를 10으로 제한 할 수는 있지만 인기도에 따라 용어를 정렬하는 방법 (모든 노드에서 사용되는 횟수)을 해결할 수는 없습니다.

누구든지 이것에 대한 경험이 있습니까?

8
Camsoft

결국 나는 데이터베이스에서 용어를 가져 와서 그룹/정렬하기 위해 자체 사용자 정의 모듈을 만들었습니다.

게시를 위해 아래 코드를 약간 수정했으며 수정 된 버전을 테스트하지 않았습니다. 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
Camsoft
  1. 새로운보기 만들기
  2. 분류로 제한 "모든 분류의 분류"
  3. "Taxonomy 용어 : 용어가 포함 된 컨텐츠"관계 추가
  4. 집계 사용
  5. "콘텐츠 : 제목"필드 추가
  6. 집계 유형 "개수"
  7. 레이블을 "사용 횟수"와 같은 것으로 변경
  8. 정렬 기준 추가 "내용 : 제목"
  9. 집계 유형 "개수"
  10. 원하는대로 정렬

다음과 같아야합니다.

the viewthe result

9
saadlulu

뷰 3에는 (매우 베타) "그룹화"기능이 있습니다. 이를 사용하여 개수 필드를 주문할 수 있어야합니다.

나는 그것이 작동한다고 보장하지는 않지만 시도해 볼 가치가 있습니다.

0
Jeremy French

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이 "무게"를 계산하는 데 약간의 오버 헤드를 추가하여 일반적으로 사용하지 않는 태그 크기를 제시한다는 것입니다.

단점은 무료로 캐싱을 얻는다는 것입니다.

0
berkes