노드에서 필드 컬렉션을 어떻게로드합니까?


72

필드 컬렉션이 몇 개인 노드가 있습니다.

node_load()출력을 보면 다음과 같습니다.

[field_rich_text_group] => Array
        (
            [und] => Array
                (
                    [0] => Array
                        (
                            [value] => 6
                        )

                    [1] => Array
                        (
                            [value] => 7
                        )

                    [2] => Array
                        (
                            [value] => 8
                        )

                )

        )

entity_id가 6, 7, 8 등인 컬렉션에 포함 된 필드 데이터를 실제로로드하는 데 어떤 API 함수를 사용할 수 있습니까?

답변:


88

도! 필드 수집 모듈을 살펴 봤어야합니다.

entity_load('field_collection_item', array($item_id))

1
비슷한 솔루션을 찾고 있습니다. 출력을 어떻게 작성하여 렌더링 된 배열에 배치합니까? 감사
— 스완

이러한 항목에 대한 레이아웃을 작성하기 위해 많은 사용자 정의 함수를 작성했습니다. 안타깝게도 렌더링 가능한 배열이 아닌 HTML을 반환합니다. 렌더링 가능한 배열을 사용하는 것이 좋지만 요점을 완전히 명확하게 알 수는 없습니다 (그럴만 한 이유가 있다고 확신하지만 공명하는 설명을 찾지 못했습니다).
— 저스틴

감사. 필드 선택은 실제로 양식과 출력을 완화하는 데 유용하지만 사용자 정의 쿼리와 관련하여 entity_metadata_wrapper를 사용하여 중첩 배열로 뛰어 들어야하는 것처럼 보입니다.
— 스완

오 야, 나는 조밀 한 배열을 내가 필요한 것으로 바꾸는 래퍼를 썼다.
— 저스틴

entity_load ()는 "엔티티"에 고유 한 노드 세트를 리턴하며 노드와 함께 사용자 정의 필드도 가져옵니다. 사용자 필드와 엔티티 필드를 어떻게 구별합니까? 단서가 있습니까?
— Raj Pawan Gumdal

38

동일한 트릭을 수행하는 래퍼 함수도 있습니다.

field_collection_item_load($id, $reset = FALSE)

또는 의견에 따라 다음을 사용하십시오.

field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE)

여러 모음을로드하려면 (예 : 추가 버튼 이있는 경우 )


5
위의 @ vasiliy-grotov의 답변에 따라을 사용 field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE)하여 여러 모음을로드 할 수 있습니다 (예 : "더 추가"btn이있는 경우).
— mediaashley 2017

21

올바른 개정판을로드하려면 field_collection_field_get_entity ()를 사용해야합니다.

사용법 예 :

$node = node_load(1);
$items = field_get_items('node', $node, 'field_fc');
foreach ($items as $item) {
 $fc = field_collection_field_get_entity($item);
 // Do something.
}

1
필드 컬렉션에 지정된 날짜 필드를 얻는 방법은 무엇입니까? 나는 다음을 사용했다. $ item = field_collection_field_get_entity ($ itemid); print $ item-> field_course_starts_on [ 'und'] [0] [ 'safe_value']; 그러나 값이 인쇄되지 않습니다.
— harikris

고마워 상수가 발생했습니다 경고 : array_flip () : STRING 및 INTEGER 값만 뒤집을 수 있습니다! ... item_load () 사용하면 문제가 해결되었습니다.
— Naidim

11

엔티티 API 모듈 entity_metadata_wrapper에서 사용할 수 있습니다 .

$node_wrapper = entity_metadata_wrapper('node', $node);
$field_collection = $node_wrapper->field_rich_text_group[0]->value();
dpm($field_collection);

모든 컬렉션을 반복 할 수도 있습니다.

$node_wrapper = entity_metadata_wrapper('node', $node);
foreach ($node_wrapper->field_rich_text_group as $field_collection_wrapper) {
  $field_collection = $field_collection_wrapper->value();
  dpm($field_collection);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.