質問: 言語を使用する際のベストプラクティスは何ですか[und]? このフォームを使用して、モジュール内のデータにアクセスし始めています。 ( コメント#1 を参照してください。)_$node->field_test[$node->language][0]['value'] _私はそれがかなり良い解決策のように見えたと思ったが、さらに同じ質問を見つけた this : 「und」が言語のないエンティティのフィールドであると想定しないでください。これは、翻訳できないフィールドであり、すべてのフィールドであるエンティティ変換モジュールがない場合にも当てはまります。さらに、drupalのさまざまな7.xバージョン間でこれに違いがあります。 field_get_items()関数を使用することをお勧めします。これは、データが格納されている言語コードの下で分類します。 そして今、私が使用しているものが将来、何かを壊す可能性があるかどうかわかりません。
回答: entity api モジュールを使用すると非常に役立ち、コードが読みやすくなります。上記のコードは、ノードの言語とフィールドの言語が異なる場合があるため、常に機能するとは限りません。エンティティapiモジュールとそのラッパーを使用すると、次のコードを使用できます。_ $node_wrapper = entity_metadata_wrapper('node', $node); $field_val = $node_wrapper->field_test->value(); _これは弾丸の証拠になるはずです。エンティティモジュールの使用に関する1つのことは、存在しないフィールドにアクセスしようとすると、通知や間違った動作の代わりに、厄介なエラーと例外がスローされることです。これを回避するには、次のようにtry/catchを実行します_try { $field_val = $node_wrapper->field_doesnt_exist->value(); } catch (entitymetadatawrapperexception $e) { $field_val = 'default/fallback value'; } _または、entitymetadatawrapperが内部で処理するisset()を使用できます。_$field_val = 'default/fallback value'; if (isset($node_wrapper->field_doesnt_exist)) { $field_val = $node_wrapper->field_doesnt_exist->value(); } _