it-swarm-korea.com

entity_metadata_wrapper-> save ()가 노드의 개정을 업데이트하지 않는 이유는 무엇입니까?

노드를 업데이트하는 모듈을 개발 중입니다 (개정 가능). 이것처럼 보입니다.

 $nodes = node_load_multiple(array(), array('type' => $bundleType));
 foreach ($ndoes as $node){
    $w = entity_metadata_wrapper('node',$node);
    $w->MyFields->set($someValue);
    $w->save();
 }

필드를 올바르게 설정했지만 $w->save() 이후 노드의 개정 ID가 변경되지 않았습니다.

개정판 ID를 어떻게 업데이트합니까?

8
zhuchun

컨텐츠 유형에 대해 노드에 새 개정판 작성 플래그가 설정되어 있습니까? $ w-> revision-> set (1); 저장하기 전에? ....

편집 :

저자는 $w->revision->set(1)을 설정하면 문제가 해결된다고 말합니다.

6
tenken

UI를 통해 노드를 편집하면 node_form() 을 통해 수행됩니다. 여기에는 node_object_prepare() 에 대한 호출이 있으며 해당 노드의 기본값을 설정합니다. 여기에는 node_save() 에서 새 개정이 필요한지 여부를 결정하는 데 사용되는 $node->revision 기본값 설정이 포함됩니다.

엔터티 API는 수정 버전을 인식하지만 node_object_prepare()은 노드에 특정한 것입니다. 즉, 노드 편집 양식의 기능을 모방하도록 개정 속성 설정을 포함하여 값을 직접 관리해야합니다.

10
mpdonadio

이 답변 중 실제로 올바른 것은 없습니다. ->set(1)을 수행하면 실제로 개정 번호를 변경하는 것처럼 들리므로 증분해야합니다.

이것은 실제로 부울 플래그이므로 정답은 $node->revision->set(true);입니다.

Zhuchun이 말했듯이 : 부울 플래그로 설명 할 때 왜 필요한지 이해하지 못합니다. 숫자보다 완벽하게 의미가 있습니다.

7
Gav_

노드 유형에 기본적으로 개정판이 활성화되어 있지 않은 경우 새 개정판을 요청하는 가장 간결한 방법은 다음과 같습니다.

$w->revision = TRUE;

다음을 사용하는 것과 정확히 같습니다.

$w->revision->set(TRUE);

타이핑이 덜 필요합니다.

0
Fonant