field_get_items의“세트”버전?


9

엔터티에서 필드 항목을 검색 할 수 있습니다.

// Find all terms on $node in field 'field_tags'.
$terms = field_get_items('node', $node, 'field_tags');

그러나 리버스, 코어 또는 다른 방법을 수행하는 편리한 방법이 있습니까?

// Attach new term $term to $node in field 'field_tags'.
$term = taxonomy_term_load($tid);
$node = field_set_items('node', $node, 'field_tags', 'taxonomy_term', $term);
node_save($node);

수동으로 $ term을 할당하는 번거 로움을 피하고 배열 구조가 어떻게 보이는지 살펴보고 때로는 수동적이지 않기 때문에 손으로 배열을 작성하십시오.

필자가 찾을 수 있었던 핵심 대기열의 유일한 문제는 필드 언어 API DX에 관한 것 입니다.

답변:


6

아니요, 그러한 기능은 없습니다.

엔터티 필드에 대한 언어 지원 에서 내 의견을 참조하십시오 .


1
감사합니다 Berdir. 나는 당신이 나타나기를 바라고 있었다;) 그리고 나는 또한 당신이 그렇게 말할 것을 두려워했다. 주석의 코드 문제는 많은 필드의 경우 '값'이 충분하지 않거나 잘못되었을 수 있다는 것입니다.
Letharion

field_get_items ()도 도움이되지 않으며 값이 포함 된 항목의 배열을 반환합니다. 또는 필드 유형이 정의하는 모든 것. 그것을 추상화 할 방법이 없습니다.
Berdir

예를 들어 field_get_items ()는 array (array ( 'tid'=> 123))를 반환합니다. 귀하의 코드 요구 field_tags이 분류의 용어 참조 것을 알고 그리고 그것은 TID 키 세트를 가지고 그리고 그것은 분류 용어에 teference입니다.
Berdir

주어진 링크에 따라 해당 페이지에 주석이 더 이상 표시되지 않습니다.
Junaid

의견은 토론 페이지에 있습니다 : drupal.org/node/1500308/discuss
Berdir

2

그러한 함수가 존재 field_set_items()하기 위해서는 stdClass객체를 분류 용어의 것으로 식별하고 , 그것을 객체를 디코딩하고 그로부터 필드 배열을 생성 할 수있는 함수에 맵핑 할 수 있어야합니다.

그렇게 할 핵심 기능이 없기 때문에 이것이 쉽지 않을 것이라고 생각합니다.


$ entity-> entity_type 속성 (yet)이 없다는 것은 매우 짜증나 지만, 그럼에도 불구 하고 내 콜백 예제에 쉽게 추가 될 수 있습니다. 이것을 반영하기 위해 질문을 업데이트했습니다.
Letharion

1
의 부족은 entity_type실제로 문제 IMHO가 아닙니다 ... 문제는 당신이 당신의 질문에 추가 한 것입니다 : "때로는 사소하지 않습니다." 데이터는 중요하지 않기 때문에 field_set_items원하는대로 작동하려면 시스템의 각 필드 유형이 객체 / 임의 변수에서 데이터 배열을 리버스 엔지니어링하는 방법을 설명하는 일종의 인터페이스를 구현해야합니다.
Clive

2

비록 이것이 복잡한 배열 구조를 구축하는 데 도움이되지는 않지만 Drupal 8에서 내가 찾고있는 것이 어느 정도 소개되어 있음을 알 수 있습니다. :)

필드, 속성 및 언어 정보에 액세스 할 수있는 더 간단한 새로운 API .

링크 된 페이지에서 사용 예 :

<?php
// Change a field value.
$body = $comment->get('comment_body');
$body[0]['value'] = 'This is actually a perverted tango';
$comment->set('comment_body', $body);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.