노드의 필드 값을 업데이트하는 방법은 무엇입니까?


21

노드의 필드 값을 변경하고 싶습니다. 다음 코드를 사용했습니다.


$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][$node->language][0]['value'] = 1;
node_save($node);

문제는 $node->language반환 es에있는 동안 print_r($node)그것의 und. $ node 배열과 $node->language다른 이유 는 무엇 이며 어떻게 얻을 수 있습니까?

답변:


41
$node = node_load($nid);
$node_wrapper = entity_metadata_wrapper('node', $node);
$node_wrapper->field_myfield->set(1);
$node_wrapper->save();

엔티티 메타 데이터 랩퍼는 노드에서 필드 값을 설정하거나 읽을 수있는 좋은 방법입니다!


entity_metadata_wrapper bc를 선호합니다. 일을 멋지고 깨끗하게 만듭니다. entity_metadata_wrapper ()에 NULL을 실수로 전달할 때 불쾌한 오류를 피하기 위해 node_load () 뒤에 $ node가 있는지 확인하는 것이 포함됩니다.
texas-bronius

$ nid를 EMW로 직접 전달할 수 있습니다.
nawfal

entity_metadata_wrapper를 사용하는 것이 허용되는 답변이어야합니다.
akalata

2
다른 사람에게 분명하지 않은 경우 entity_metadata_wrapper ()는 Entity API 모듈의 일부입니다. drupal.org/project/entity
BWPanda

9

field_attach_update()기능을 시도하십시오 .

$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][LANGUAGE_NONE][0]['value'] = 1;
field_attach_update('node', $node);

필드 값을 업데이트하고보다 성능이 우수합니다 node_save.


1
field_attach_update가 다운 보트되는 이유는 무엇입니까?
milkovsky

6
$node = node_load($nid); 
$field_language = field_language('node', $node, 'field_myfield');
$node->field['field_myfield'][$field_language][0]['value'] = 1;
node_save($node);

4

업데이트 된 시간, 개정에 대한 노드 메타 데이터를 업데이트하지 않고 필드 값만 업데이트하려면 function을 사용하십시오 field_attach_update().

예:

$node = node_load($nid);
$field_language = field_language('node', $node, 'field_myfield');
$node->field_fieldname[$field_language][0]['value'] = 'some value';
field_attach_update('node', $node);

때로는 다음을 사용하여 노드 정적 캐시를 재설정해야 할 수도 있습니다 resetCache(array($nid)).

entity_get_controller('node')->resetCache(array($node->nid));

출처 : 노드 자체를 저장하지 않고 노드 필드 저장


2

방금 이것을 구현 했으며이 코드가 저에게 효과적이라는 것을 알았습니다.

$node = node_load($nid); 
if (isset($node)) {
  $field_language = field_language('node', $node, 'field_myfield');
  $node->field_fieldname[$field_language][0]['value'] = 'some value';
  node_save($node);
}

field_fieldname을 업데이트 할 때 4 행에서 이것을 사용한다는 것을 알았습니다.

$node->field['field_myfield'][0]['value'] = 'some value';

작동하지 않았다.

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