¿Cómo se carga una colección de campos desde un nodo?


72

Tengo un nodo que tiene algunas colecciones de campos.

Cuando miro la node_load()salida, veo:

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

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

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

                )

        )

¿Qué función API puedo usar para cargar realmente los datos de campo contenidos en la colección que tiene un ID de entidad de 6, 7, 8, etc.?

Respuestas:


88

Doh! Debería haber buscado en el módulo de colección de campo:

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

1
Estoy buscando una solución similar. ¿Cómo se escribe la salida y se coloca en una matriz renderizada? Gracias
cisne

Escribí un montón de funciones personalizadas para construir el diseño de estos elementos. Lamentablemente, devuelven HTML, no matrices renderizables. Sería bueno usar matrices renderizables, pero no estoy completamente claro sobre el punto (estoy seguro de que hay una buena razón para hacerlo, simplemente no he encontrado una explicación que resuene).
Justin

Gracias. La colección de campos es realmente útil para facilitar los formularios y la salida, pero cuando se trata de consultas personalizadas, parece que tengo que sumergirme en las matrices anidadas, incluso usando entity_metadata_wrapper.
cisne

Oh, sí, escribí envoltorios que solo convierten las densas matrices en lo que necesito.
Justin

entity_load () devuelve un conjunto de nodos que son específicos de "entidad" y junto con ellos obtenemos los campos definidos por el usuario también. ¿Cómo diferenciamos los campos de usuario de los campos de una entidad? ¿Alguna pista?
Raj Pawan Gumdal

38

También hay una función de contenedor que hace el mismo truco:

field_collection_item_load($id, $reset = FALSE)

o según el comentario, use:

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

para cargar varias colecciones (por ejemplo, si tiene un botón Agregar más ).


55
Según la respuesta anterior de @ vasiliy-grotov, también puede usarla field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE)para cargar varias colecciones (por ejemplo, si tiene un btn "Agregar más").
mediaashley

21

field_collection_field_get_entity () debe usarse para cargar la revisión correcta.

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

1
¿Cómo obtener los campos de fecha asignados en la colección de campos? Usé lo siguiente: $ item = field_collection_field_get_entity ($ itemid); print $ item-> field_course_starts_on ['und'] [0] ['safe_value']; Pero no se imprimen valores para ello.
harikris

Gracias por esto. Me estaba volviendo constante Advertencia: array_flip (): ¡Solo puedo voltear los valores STRING e INTEGER! con ... item_load () y esto resolvió el problema.
Naidim

11

Puede usar entity_metadata_wrapperdesde el módulo Entity API :

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

También puedes recorrer todas las colecciones:

$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);
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.