ノードを保存する前にカスタムフォームで変更されたフィールドを一般的に検出する
field_attach_form()を使用して、コンテンツタイプの特定のフィールドをカスタムフォームに追加しています。フォームが送信されると、#validateおよび#submitコールバックからfield_attach_form_validate()およびfield_attach_submit()を呼び出してこれらのフィールドを処理しています。 その時点で、投稿後の準備されたノードオブジェクトを元のノードと比較し、フィールドのいずれかが変更された場合にのみnode_save()を使用します。したがって、最初にを使用して元のノードをロードしますentity_load_unchanged()。 残念ながら、元のノードオブジェクトのフィールド配列は、フィールドに変更が加えられていない場合でも、保存を待機している準備済みノードオブジェクトのフィールド配列と一致しないため、単純な "$ old_field == $ new_field 「比較は不可能です。たとえば、元のテキストフィールドは次のように表示されます。 $old_node->field_text['und'][0] = array( 'value' => 'Test', 'format' => NULL, 'safe_value' => 'Test', ); 一方、準備されたノードでは次のように表示されます。 $node->field_text['und'][0] = array( 'value' => 'Test', ); 「値」キーを比較するだけでよいと思うかもしれませんが、「値」キーを持たない他の要素で構成されたフィールドに遭遇します。例えば、NO「値」キーが存在しないアドレス・フィールドでの見てみましょうと対応していない古い、準備ノードの両方のキーがあります。 古いノード $old_node->field_address['und'][0] = array( 'country' => 'GB', 'administrative_area' => 'Test', 'sub_administrative_area' => NULL, 'locality' => 'Test', 'dependent_locality' => NULL, …