分類用語を言語でフィルタリングするにはどうすればよいですか?


9

(ノードの場合と同様に)分類用語を言語でフィルターする方法を検索しましたが、それを行う方法が見つかりませんでした。

Viewsモジュールは、分類法でもノードでもフィルターをサポートしますか?
分類用語を言語でフィルタリングするにはどうすればよいですか?


1.語彙で2つのグループを使用する2. hook_form_alterを使用して、ユーザーが使用するグループを宣言する
dobeerman

ユーザーが分類法のピックアップグループをどのように処理する必要があるのか​​理解できません。サイトは、例A lang、B lang、C langの多言語であり、ユーザーがB langに移動したときに、この言語に基づいて分類を表示したい場合など、他の言語で表示されます。有効になっている各言語の分類用語を翻訳しているわけではありません。
モハマドサラマ

#ビューでクエリ文字列を編集できますか?または単に私に通知するためのものです。それを編集する場所はどこですか?
モハマドサラマ

回答:


11

モジュール国際化ビューを有効にすることにより、分類用語を言語でフィルターするオプションが利用可能になります。バージョンは現在開発中ですが、魅力のように機能することに注意してください。

i18nviewsのインストールの効果を示すスクリーンショット


2
このフィルタは、モジュールも有効にしている場合にのみ使用可能になることに注意してくださいi18n_taxonomy。つまり、分類用語にノード変換を使用する場合です。
タニアス2014

3

国際化ビューモジュールを(国際化の一部である)分類変換モジュールと組み合わせて使用して、分類用語の言語フィルターを取得できます。

国際化を使用してビューを翻訳します。これは進行中の作業であり、すべてのビュープロパティをまだ翻訳できるわけではありません。国際化6.x-1.5以降が必要です。


2

ここに別の解決策があります:

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',
    );
  }
}

ソースはこちら


1

Drupalは言語をノードに関連付けるだけなので、Viewsモジュールでは、関連付けられた言語で分類用語をフィルタリングすることはできません。

ただし、定義済み言語のノードのみを表示するようにビューを設定できます。

  • [フィルター条件]で[追加]を選択します
  • 次のフォームで、「コンテンツの翻訳:言語」を選択します
  • 次のフォームでは、「すべて選択」、「現在のユーザーの言語」、「デフォルトのサイト言語」、「言語なし」、およびサイトで有効になっている言語のいずれかから、ビューコンテンツのフィルターに使用する言語を選択できます。

このフィルターをViewsモジュールに付属する分類用語ビューに追加し、コンテンツとしてフィルター処理する言語として英語を選択し、2つのノードを作成しました。1つは英語で、もう1つはラテン語です。両方のノードに同じ分類用語(IDが22)を割り当てました。http://example.com/taxonomy/term/22
にアクセスすると、ビューにはコンテンツのみが英語で表示されていました。


drupal 5では本当に奇妙ですが、分類法を言語で簡単にフィルタリングできます。しかし、答えを共有してくれてありがとう。
モハマドサラマ

0

エンティティ翻訳のための言語フィルタリング。ビューの「フィルター基準」セクションの言語フィルターは、ノード翻訳システムを使用する場合にのみ必要です。代わりに、Drupal 7で利用できるより最新のエンティティ翻訳システムを使用する場合は、ビューの[その他]セクションの[フィールド言語]設定を調整してください。

タクソノミー用語でそれを行う方法。これを分類法の用語に試してみましたが、うまくいきました。翻訳可能なすべてのフィールドに2つのフィールドインスタンスの正しい1つ、つまり「出現:taxonomy-term:your-vocab-name」の説明が付いたフィールドインスタンスを追加するようにしてください。詳細については、問題#1841434を参照してください。


0

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を使用します


0

国際化ビューモジュールで他のいくつかの問題が発生している、つまり、翻訳済みの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');
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.