web-dev-qa-db-ja.com

エンティティ参照を制限して、同じ(または未定義)言語のノードの参照のみを許可するにはどうすればよいですか?

ビューに基づいてエンティティ参照フィールドのノードの 表示されたタイトルに言語を追加 できることはわかっています。私が発見できなかったのは、一致する値のみを表示および許可するように可能な値を制限する方法です。

  • 現在のノードが言語に依存しない場合、すべてのノードが参照フィールドに可能な限りリストされている必要があります。

  • ノードに言語が定義されている場合は、同じ言語または未定義の言語のノードのみを使用できます。

ノードの言語が変更される場合でも、データベースに保存されて間違った選択が行われることを気にしないでください。問題になるほど頻繁に発生することはないはずです。利用可能な参照の選択肢のリストに「間違った」ノードを入れたくありません。保存時の検証は良いことですが、必須ではありません。

ビューを使用して、ノード編集フォームのエンティティ参照フィールドのドロップダウンを入力しようとしました:

Screenshot of field settings

私の大きなブロックは、利用可能なエンティティのリストを提供するビュー内の現在のノードの言語にアクセスする方法です。現在のUI言語を使用して推測する以外の方法を見つけることはできませんが、編集では間違っている可能性があり、通常、新しいノードの作成では間違っています。理想的には、エンティティ参照フィールドは、ノードの編集元で選択された言語に従ってAJAXを介して再入力する必要があります。

将来の訪問者のために、完全な回答をいただければ幸いです。もちろん、意見に基づかない回答も歓迎します。

6
Mołot

参照フィールドオプションの制限 モジュールを使用すると、いくつかのタイプの参照フィールドで、ウィジェットの使用可能なオプションを現在のエンティティの他のフィールドの値によって制限できます。

現在、分類用語と エンティティ参照 フィールドをサポートしています。

4
Bala

ビューを使用したソリューションのいくつかの「概念」を提案できます。

ターゲットノード言語の定義に成功したかどうかはわかりませんでした。 (いいえの場合、コメントを書いてください、私は答えを更新します)。

Step1。 entityreferenceフィールドをフィルターするビューに引数を渡すことができます。次に、_$field['settings']['handler_settings']['view']['args'];_でプログラムによってフィールドビューの引数に言語を追加することができます。

Step2。プログラムでカスタムコンテキストフィルターを作成できます。フィルターは言語IDを渡します。このコンテキストは、agrument値を使用してView言語を変更します。クエリの言語を変更できます-_views_handler_argument_の子クラスのquery()メソッド。

次に、dpm($this)メソッドでquery()を実行し、言語の値を引数に変更します。

1
milkovsky

チェックアウト Translate Entity Reference モジュール。

別のオプションは、エンティティ参照フィールドの選択可能なオプションをレンダリングするカスタムビューを作成することです。ただ:

  1. 新しいビューを作成する
  2. 新しいエンティティ参照ビューウィジェットを追加する
  3. コンテンツタイプのフィルターを追加する
  4. 「Language」フィールドに新しいコンテキストフィルターを追加します
  5. 「デフォルト値を提供」+「PHPコード」を選択します(これには「ビューPHP」モジュールが必要になる場合があります)
  6. 「PHPコンテキストフィルターコード」テキストエリアに次のコードを入力します。

    グローバル$ language; $ lang = $ language-> language;

    $ node = menu_get_object(); if(!empty($ node)){$ lang = $ node-> language; } $ langを返します。

  7. エンティティ参照フィールドを編集し、新しいカスタムビューをエンティティ選択モードとして選択します

1
Roger

フィールド参照

構成に応じて、作成者は同じノード/エンティティ、他のノード/エンティティ、特定のリビジョン、特定の言語、またはフィールド内の特定のデルタ値からフィールドを選択できます。フィールドは、元のノード/エンティティから「完全」または「ティーザー」モードを使用して表示できます。

0
Bala

同じことを探しています。

私が得た最も近いものは、現在のユーザーの言語を使用することでした。現在のユーザーの言語は、/admin/config/regional/language/configureで選択した言語によって決まります。

  • 「エンティティの翻訳:翻訳」という関係を追加する
  • フィルター「エンティティの翻訳:言語(=現在のユーザーの言語)」を追加します

また、このリンクにより、field_titleの問題が解決されました: https://drupal.org/node/1327012

したがって、たとえば、/en/node/addに移動すると、エンティティビューに英語の参照エンティティが入力されます。ただし、ユーザーが編集フォームで言語を変更しても、ビューは同じままです。

このソリューションは、参照されるエンティティがすべての言語で同じであり、単に翻訳された場合に十分です(コアとなる分類法の翻訳が提供する「用語のローカライズ」機能のように)。

ビューでタイトルフィールドの出力を編集し、言語に応じてcssクラスを追加することは、私が考えることができる他の唯一の「迅速かつ汚い」方法です。次に、ビュー内のエンティティのクラスを言語選択フィールドにマッピングすることにより、エンティティを表示/非表示にするjqueryを記述します。

*理想的には、エンティティビューはノード編集で選択された言語に従ってajaxを介して再入力する必要があります。*

誰かアイデアがあれば教えてください。

ありがとう

0
gkom