Como carrego uma coleção de campos de um nó?


72

Eu tenho um nó que possui algumas coleções de campos.

Quando olho para a node_load()saída, vejo:

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

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

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

                )

        )

Qual função de API posso usar para realmente carregar os dados do campo contidos na coleção que possui um entity_id de 6, 7, 8 etc.?

Respostas:


88

Doh! Eu deveria ter olhado no módulo de coleta de campo:

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

11
Estou procurando uma solução semelhante. Como você escreve a saída e as colocou na matriz renderizada? Obrigado
cisne

Escrevi várias funções personalizadas para criar o layout desses itens. Infelizmente, eles retornam matrizes HTML, não renderizáveis. Seria bom usar matrizes renderizáveis, mas não estou completamente claro (tenho certeza de que há uma boa razão para fazê-lo, apenas não encontrei uma explicação que ressoe).
11117 Justin

Obrigado. A coleção de campos é realmente útil para facilitar os formulários e a saída, mas quando se trata de consultas personalizadas, pareço ter que mergulhar nas matrizes aninhadas, mesmo usando entity_metadata_wrapper.
swan

Ah, sim, escrevi invólucros que transformam as matrizes densas no que eu preciso.
11117 Justin

entity_load () retorna um conjunto de nós que são específicos para "entity" e, junto com eles, também obtemos os campos definidos pelo usuário. Como diferenciamos os campos do usuário dos campos de uma entidade? Alguma pista?
Raj Pawan Gumdal,

38

Há também uma função de wrapper que faz o mesmo truque:

field_collection_item_load($id, $reset = FALSE)

ou conforme comentário, use:

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

para carregar várias coleções (por exemplo, se você tiver um botão Adicionar mais ).


5
Conforme a resposta de @ vasiliy-grotov acima, você também pode usar field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE)para carregar várias coleções (por exemplo, se você tiver um btn "Adicionar mais").
mediaashley

21

field_collection_field_get_entity () deve ser usado para carregar a revisão correta.

Exemplo de uso:

$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.
}

11
como obter os campos de data atribuídos na coleção de campos? Eu usei o seguinte: $ item = field_collection_field_get_entity ($ itemid); imprime $ item-> field_course_starts_on ['und'] [0] ['safe_value']; .Mas nenhum valor está sendo impresso para ele.
harikris

Obrigado por isso. Eu estava ficando constante Aviso: array_flip (): só pode inverter os valores STRING e INTEGER! com ... item_load () e isso resolveu o problema.
Naidim

11

Você pode usar entity_metadata_wrapperno módulo API da entidade :

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

Você também pode fazer um loop em todas as coleções:

$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);
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.