분류 용어를 언어별로 필터링하려면 어떻게해야합니까? 용어를 필터링하는

노드에 대해 수행 된 것처럼 언어로 분류 용어를 필터링하는 방법을 찾았지만이를 수행 할 방법을 찾지 못했습니다.

Views 모듈은 분류법 또는 노드에서만 해당 필터를 지원합니까?
분류 용어를 언어별로 필터링하려면 어떻게해야합니까?



답변

국제화보기 모듈 을 사용하면 언어별로 분류 용어를 필터링하는 옵션을 사용할 수 있습니다. 버전은 현재 개발 중이지만 매력처럼 작동합니다.

i18nviews 설치 효과를 보여주는 스크린 샷


답변

당신은 사용할 수 있습니다 국제화 조회수 (의 일부인 분류 번역 모듈과 함께 모듈을 국제화 분류 규정에 대한 언어 필터를 얻기 위해).

국제화를 사용하여보기를 번역하십시오. 현재 진행중인 작업으로 일부 뷰 속성을 아직 번역 할 수있는 것은 아닙니다. 국제화 6.x-1.5 이상이 필요합니다 .


답변

또 다른 해결책은 다음과 같습니다.

function mymodule_views_query_alter(&$view, &$query) {
  if ($view->name == 'yourviewmachinename') {
    $query->where[] = array(
      'conditions' => array(array(
        'field' => 'taxonomy_term_data.language',
        'value' => array('***CURRENT_LANGUAGE***'),
        'operator' => 'in',
      )),
      'args' => array(),
      'type' => 'AND',
    );
  }
}

여기에 출처 .


답변

Drupal은 언어를 노드와 만 연관시키기 때문에 Views 모듈에서는 연관된 언어로 분류 용어를 필터링 할 수 없습니다.

그러나 사전 정의 된 언어의 노드 만 표시하도록보기를 설정할 수 있습니다.

  • “필터 기준”에서 “추가”를 선택하십시오.
  • 다음 양식에서 “콘텐츠 번역 : 언어”를 선택하십시오.
  • 다음 양식을 사용하면 “모두 선택”, “현재 사용자 언어”, “기본 사이트 언어”, “언어 없음”및 사이트에서 활성화 된 언어 중 하나 사이에서보기 내용을 필터링하는 데 사용할 언어를 선택할 수 있습니다.

이 필터를 Views 모듈과 함께 제공되는 분류 용어보기에 추가하여 내용을 필터링하기 위해 언어로 영어를 선택하고 영어와 라틴어로 각각 두 개의 노드를 만들었습니다. 두 노드 모두에 동일한 분류 용어 인 ID가 22 인 것을 할당
했습니다. http://example.com/taxonomy/term/22를 방문했을 때 뷰는 내용을 영어로 효과적으로 표시했습니다.


답변

엔터티 번역을위한 언어 필터링 뷰의 “필터 기준”섹션의 언어 필터는 노드 변환 시스템을 사용하는 경우에만 필요합니다. 대신 Drupal 7에 사용 가능한 최신 엔티티 변환 시스템을 사용하는 경우보기의 “기타”섹션에서 “필드 언어”설정을 조정하십시오.

분류법 용어로하는 방법. 나는 이것을 분류학 용어로 시도해 보았습니다. 번역 가능한 모든 필드에 대해 두 개의 필드 인스턴스 중 올바른 하나, 즉 “appears in : taxonomy-term : your-vocab-name”에 대한 설명이있는 필드 인스턴스를 추가하십시오. 자세한 내용은 이슈 # 1841434를 참조하십시오 .


답변

YOUR_MODULE.module에 추가

function YOUR_MODULE_views_data_alter(&$data) {
  $opts['title'] = 'Language';
  $opts['table'] = 'taxonomy_term_data';
  $opts['help'] = 'Taxonomy term language.';
  $opts['filter']['handler'] = 'YOUR_MODULE_handler_filter_language';
  $data['taxonomy_term_data']['language'] = $opts;
}

YOUR_MODULE.info에 추가

files[] = views/handlers/filter/YOUR_MODULE_handler_filter_language.inc

모듈 디렉토리 내에 “views / handlers / filter / YOUR_MODULE_handler_filter_language.inc”파일을 작성하고 다음 컨텐츠를 배치하십시오.

/**
 * @file
 * Views handler to filter language by term.
 */

/**
 * Filter by submission status
 */
class YOUR_MODULE_handler_filter_language extends views_handler_filter_in_operator {
  function get_value_options() {
    $languages = array(
      '***CURRENT_LANGUAGE***' => t("Current user's language"),
      '***DEFAULT_LANGUAGE***' => t("Default site language"),
      LANGUAGE_NONE            => t('Language neutral'),
    );
    $this->value_title = t('Language');
    $options = array_merge($languages, locale_language_list());
    $this->value_options = $options;
  }

  // '0' won't work as a key for checkboxes.
  function value_form(&$form, &$form_state) {
    parent::value_form($form, $form_state);
    $form['value']['#type'] = 'select';
  }
}

모든 캐시를 지우면 새 기준이 나타납니다.

아니면 내 모듈 Akuma Taxonomy를 사용하십시오.


답변

Internationalization Views 모듈에 다른 문제가 있습니다. 즉, 이미 번역 된 UI를 뷰 (페이지 방향, 머리글 / 바닥 글 텍스트 등)에서 변경하는 것처럼 보입니다. 언어 필터를 만들기위한 관련 코드를 별도의 코드로 작성합니다 구성 단위. 아래의 MYMODULE을 모듈 이름으로 바꾸십시오. 나를위한 매력으로 작동합니다!

/**
 * Code below is lifted from the i18nviews module. Gives the possibility to filter for
 * language on term views
 *
 * Implementation of hook_views_data_alter().
 *
 * Registers views handlers with dependency to i18n_taxonomy.
 */
function MYMODULE_views_data_alter(&$data) {

  // Add i18n language field to taxonomy_term_data. No clash.
  $data['taxonomy_term_data']['language'] = array(
    'group' => t('Taxonomy term'),
    'title' => t('Language'),
    'help' => t('The language the term is in.'),
    'field' => array(
      'handler' => 'MYMODULE_handler_field_taxonomy_term_language',
      'click sortable' => TRUE,
    ),
    'filter' => array(
      'handler' => 'MYMODULE_handler_filter_taxonomy_term_language',
    ),
    'argument' => array(
      'handler' => 'MYMODULE_handler_argument_taxonomy_term_language',
    ),
  );
}

/**
 * Field handler to provide simple renderer that shows term language.
 */
class MYMODULE_handler_field_taxonomy_term_language extends views_handler_field_taxonomy {
  function render($values) {
    $languages = locale_language_list();
    $value = isset($languages[$values->{$this->field_alias}]) ? $languages[$values->{$this->field_alias}] : '';
    $value = $this->get_value($values);
    return $this->render_link($this->sanitize_value($value), $values);
  }
}

/**
 * Filter by language
 */
class MYMODULE_handler_filter_taxonomy_term_language extends views_handler_filter_in_operator {
  function get_value_options() {
    if (!isset($this->value_options)) {
      $this->value_title = t('Language');
      $languages = array(
        '***CURRENT_LANGUAGE***' => t("Current user's language"),
        '***DEFAULT_LANGUAGE***' => t("Default site language"),
        LANGUAGE_NONE => t('No language')
      );
      $languages = array_merge($languages, locale_language_list());
      $this->value_options = $languages;
    }
  }
}

/**
 * Argument handler to accept a language.
 */
class MYMODULE_handler_argument_taxonomy_term_language extends views_handler_argument {
  function construct() {
    parent::construct('language');
  }

  /**
   * Override the behavior of summary_name(). Get the user friendly version
   * of the language.
   */
  function summary_name($data) {
    return $this->term_language($data->{$this->name_alias});
  }

  /**
   * Override the behavior of title(). Get the user friendly version of the
   * node type.
   */
  function title() {
    return $this->term_language($this->argument);
  }

  function term_language($langcode) {
    $languages = locale_language_list();
    return isset($languages[$langcode]) ? $languages[$langcode] : t('Unknown language');
  }
}