노드에 대해 수행 된 것처럼 언어로 분류 용어를 필터링하는 방법을 찾았지만이를 수행 할 방법을 찾지 못했습니다.
Views 모듈은 분류법 또는 노드에서만 해당 필터를 지원합니까?
분류 용어를 언어별로 필터링하려면 어떻게해야합니까?
노드에 대해 수행 된 것처럼 언어로 분류 용어를 필터링하는 방법을 찾았지만이를 수행 할 방법을 찾지 못했습니다.
Views 모듈은 분류법 또는 노드에서만 해당 필터를 지원합니까?
분류 용어를 언어별로 필터링하려면 어떻게해야합니까?
답변:
또 다른 해결책은 다음과 같습니다.
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');
}
}