ビューに基づいてエンティティ参照フィールドのノードの 表示されたタイトルに言語を追加 できることはわかっています。私が発見できなかったのは、一致する値のみを表示および許可するように可能な値を制限する方法です。
現在のノードが言語に依存しない場合、すべてのノードが参照フィールドに可能な限りリストされている必要があります。
ノードに言語が定義されている場合は、同じ言語または未定義の言語のノードのみを使用できます。
ノードの言語が変更される場合でも、データベースに保存されて間違った選択が行われることを気にしないでください。問題になるほど頻繁に発生することはないはずです。利用可能な参照の選択肢のリストに「間違った」ノードを入れたくありません。保存時の検証は良いことですが、必須ではありません。
ビューを使用して、ノード編集フォームのエンティティ参照フィールドのドロップダウンを入力しようとしました:
私の大きなブロックは、利用可能なエンティティのリストを提供するビュー内の現在のノードの言語にアクセスする方法です。現在のUI言語を使用して推測する以外の方法を見つけることはできませんが、編集では間違っている可能性があり、通常、新しいノードの作成では間違っています。理想的には、エンティティ参照フィールドは、ノードの編集元で選択された言語に従ってAJAXを介して再入力する必要があります。
将来の訪問者のために、完全な回答をいただければ幸いです。もちろん、意見に基づかない回答も歓迎します。
参照フィールドオプションの制限 モジュールを使用すると、いくつかのタイプの参照フィールドで、ウィジェットの使用可能なオプションを現在のエンティティの他のフィールドの値によって制限できます。
現在、分類用語と エンティティ参照 フィールドをサポートしています。
ビューを使用したソリューションのいくつかの「概念」を提案できます。
ターゲットノード言語の定義に成功したかどうかはわかりませんでした。 (いいえの場合、コメントを書いてください、私は答えを更新します)。
Step1。 entityreferenceフィールドをフィルターするビューに引数を渡すことができます。次に、_$field['settings']['handler_settings']['view']['args'];
_でプログラムによってフィールドビューの引数に言語を追加することができます。
Step2。プログラムでカスタムコンテキストフィルターを作成できます。フィルターは言語IDを渡します。このコンテキストは、agrument値を使用してView言語を変更します。クエリの言語を変更できます-_views_handler_argument
_の子クラスのquery()
メソッド。
次に、dpm($this)
メソッドでquery()
を実行し、言語の値を引数に変更します。
チェックアウト Translate Entity Reference モジュール。
別のオプションは、エンティティ参照フィールドの選択可能なオプションをレンダリングするカスタムビューを作成することです。ただ:
「PHPコンテキストフィルターコード」テキストエリアに次のコードを入力します。
グローバル$ language; $ lang = $ language-> language;
$ node = menu_get_object(); if(!empty($ node)){$ lang = $ node-> language; } $ langを返します。
エンティティ参照フィールドを編集し、新しいカスタムビューをエンティティ選択モードとして選択します
構成に応じて、作成者は同じノード/エンティティ、他のノード/エンティティ、特定のリビジョン、特定の言語、またはフィールド内の特定のデルタ値からフィールドを選択できます。フィールドは、元のノード/エンティティから「完全」または「ティーザー」モードを使用して表示できます。
同じことを探しています。
私が得た最も近いものは、現在のユーザーの言語を使用することでした。現在のユーザーの言語は、/admin/config/regional/language/configure
で選択した言語によって決まります。
また、このリンクにより、field_titleの問題が解決されました: https://drupal.org/node/1327012 。
したがって、たとえば、/en/node/add
に移動すると、エンティティビューに英語の参照エンティティが入力されます。ただし、ユーザーが編集フォームで言語を変更しても、ビューは同じままです。
このソリューションは、参照されるエンティティがすべての言語で同じであり、単に翻訳された場合に十分です(コアとなる分類法の翻訳が提供する「用語のローカライズ」機能のように)。
ビューでタイトルフィールドの出力を編集し、言語に応じてcssクラスを追加することは、私が考えることができる他の唯一の「迅速かつ汚い」方法です。次に、ビュー内のエンティティのクラスを言語選択フィールドにマッピングすることにより、エンティティを表示/非表示にするjqueryを記述します。
*理想的には、エンティティビューはノード編集で選択された言語に従ってajaxを介して再入力する必要があります。*
誰かアイデアがあれば教えてください。
ありがとう