(ノードの場合と同様に)分類用語を言語でフィルターする方法を検索しましたが、それを行う方法が見つかりませんでした。
Viewsモジュールは、分類法でもノードでもフィルターをサポートしますか?
どのように分類用語を言語でフィルタリングできますか?
モジュール Internationalization Views を有効にすることで、分類用語を言語でフィルターするオプションが利用可能になります。バージョンは現在開発中ですが、魅力のように機能することに注意してください。
Internationalization Views モジュールをTaxonomy Translationモジュール( Internationalization の一部)と組み合わせて使用して、分類用語の言語フィルターを取得できます。
国際化を使用してビューを翻訳します。これは進行中の作業であり、すべてのビュープロパティをまだ翻訳できるわけではありません。 国際化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モジュールは分類用語をそれに関連付けられた言語でフィルタリングすることを許可しません。
ただし、定義済み言語のノードのみを表示するようにビューを設定できます。
このフィルターをビューモジュールに付属する分類用語ビューに追加し、コンテンツとしてフィルター処理する言語として英語を選択して、2つのノードを作成しました。1つは英語、もう1つはラテン語です。両方のノードに同じ分類用語を割り当てました。IDは22です。
http://example.com/taxonomy/term/22 にアクセスしたとき、ビューには英語のコンテンツのみが効果的に表示されていました。
国際化ビューモジュールで他のいくつかの問題が発生している、つまり、翻訳済みの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');
}
}
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
エンティティ翻訳の言語フィルタリング。ビューの[フィルター基準]セクションの言語フィルターは、ノード翻訳システムを使用する場合にのみ必要です。代わりに、より近代的な Entity Translation システムでDrupal 7に使用できる)を使用する場合は、ビューの[その他]セクションの[フィールド言語]設定を調整してください。
分類法の用語でそれを行う方法。分類法の用語でこれを試してみましたが、うまくいきました。翻訳可能なすべてのフィールドに2つのフィールドインスタンスの正しい1つ、つまり「出現:taxonomy-term:your-vocab-name」の説明が付いたフィールドインスタンスを追加するようにしてください。詳細については、 問題#1841434で を参照してください。