hook_node_presaveを使用してフィールドの値を変更する方法


9

基本的に、名と姓を$ node-> field_par_contact_nameにまとめます

しかし、それは私に警告を与えます。(下記参照)

function Leadership_node_presave($ node){
  if($ node-> type == 'partnership'){
    $ first_name = $ node-> field_par_contact_first_name ['und'] [0] ['name'];
    $ surname = $ node-> field_par_contact_surname ['und'] [0] ['name'];

    // https://drupal.org/project/field_hidden
    //非表示の変数
    $ node-> field_par_contact_name ['und'] [0] ['value'] = $ first_name。「」。$姓;

    //保存後の警告:array_flip():STRING値とINTEGER値のみを反転できます!DrupalDefaultEntityController-> load()(... / drupal-7.23 / includes / entity.incの173行目)
  }
}

更新、画像を参照してください: ここに画像の説明を入力してください


プログラムでフォームを送信していますか?つまり、hook_form_alterを使用していますか?そして、あなたのコードのどこかにdrupal_form_submit?
2013年

回答:


6

まず、保存しているフィールド値に間違った配列キーを使用している可能性があります。「名前」は「値」でなければなりません。

$node->field_par_contact_name['und'][0]['value'];

次に、実際には、「名」フィールドと「姓」フィールドに分類用語参照フィールドを使用しています。参照フィールドに関する重要な点の1つは、参照されるエンティティが完全に読み込まれ、オブジェクトで使用できるとは必ずしも想定できないことです。デフォルトでは、ノードオブジェクトが読み込まれると、そのフィールドは次のようになります。

$node->field_par_contact_first_name (Array)
  'und' (Array)
    0 (Array)
      'tid' => 284

「tid」キーのみが確実に存在します。'name'は参照された用語のプロパティであり、通常は自動的に利用可能ではありません。(後続のコードは実際に参照された用語をロードして$ nodeオブジェクト内で使用可能にするかもしれませんが、そうであればそれは単なる偶然です。)

「First Name」フィールドと「Surname」フィールドが参照ではなくテキストフィールドであると、はるかに楽になります。その場合、それらの値は、参照されている個別の分類用語ではなく、ノード自体に直接属します。

ただし、分類用語参照を使用してスタックしている場合は、コード内で参照用語をロードするようにポイントを設定し、$ term-> nameプロパティ自体から必要な値を取得する必要があります。


上の画像を参照してください。「価値」はありません
ケンピーター2013年

ああ、あなたは、私が想定したテキストフィールドではなく、姓と名の分類基準参照フィールドを使用しています。それは独特です。:)答えを更新しました。
Les Lim

あなたは正しいです。
ケンピーター2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.