hook_node_presave를 사용하여 필드 값을 변경하는 방법


9

기본적으로 이름과 성을 $ node-> field_par_contact_name에 넣고 싶습니다.

그러나 그것은 나에게 경고를줍니다. (아래 참조)

함수 partner_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?
harshal

답변:


6

우선, 저장하는 필드 값에 잘못된 배열 키를 사용하고있을 것입니다. '이름'은 '값'이어야합니다.

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

둘째, 실제로 "이름"및 "성"필드에 분류 용어 참조 필드를 사용하고 있습니다. 참조 필드의 중요한 점 중 하나는 참조 된 엔터티가 완전히로드되어 있고 개체에서 사용할 수 있다고 항상 가정 할 수는 없다는 것입니다. 기본적으로 노드 오브젝트가로드되면 해당 필드는 다음과 같습니다.

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

'tid'키만 있습니다. 'name'은 참조되는 용어의 속성이며 일반적으로 자동으로 사용할 수 없습니다. (다음 코드는 실제로 참조 된 용어를로드하여 $ node 객체 내에서 사용 가능하게 할 수 있지만, 그런 경우에 발생합니다.)

"이름"및 "성"필드가 참조가 아닌 텍스트 필드 인 경우 훨씬 더 쉬울 것입니다. 그런 다음 해당 값은 참조되는 별도의 분류 용어가 아닌 노드 자체에 직접 속합니다.

분류법 용어 참조를 사용하는 경우 코드에서 참조 용어를로드하도록 한 다음 $ term-> name 특성 자체에서 필요한 값을 가져와야합니다.


위 이미지를 참조하십시오. '가치'가 없습니다
kenpeter

아, 텍스트 필드가 아니라 이름과성에 분류 용어 참조 필드를 사용하고 있습니다. 독특합니다. :) 답변을 업데이트했습니다.
Les Lim

당신이 올바른지.
kenpeter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.