Come carico una raccolta di campi da un nodo?


72

Ho un nodo che ha alcune raccolte di campi su di esso.

Quando guardo l' node_load()output, vedo:

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

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

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

                )

        )

Quale funzione API posso usare per caricare effettivamente i dati del campo contenuti nella raccolta che ha un entity_id di 6, 7, 8, ecc?

Risposte:


88

Doh! Avrei dovuto guardare nel modulo di raccolta dei campi:

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

1
Sto cercando una soluzione simile. Come si scrive l'output e li si inserisce nella matrice renderizzata? Grazie
cigno

Ho scritto un sacco di funzioni personalizzate per creare il layout di questi elementi. Purtroppo restituiscono HTML, non matrici renderizzabili. Sarebbe bello usare array renderizzabili, ma non sono completamente chiaro sul punto (sono sicuro che ci sia una buona ragione per farlo, non ho trovato una spiegazione che risuoni).
Giustino,

Grazie. La raccolta dei campi è davvero utile per semplificare i moduli e l'output, ma quando si tratta di query personalizzate, mi sembra di dover immergermi negli array nidificati, anche usando entity_metadata_wrapper.
cigno

Oh yah, ho scritto wrapper che trasformano le matrici dense in ciò di cui ho bisogno.
Giustino,

entity_load () restituisce un insieme di nodi specifici di "entità" e insieme a loro otteniamo anche i campi definiti dall'utente. Come differenziamo i campi utente dai campi di un'entità? Qualche indizio?
Raj Pawan Gumdal,

38

C'è anche una funzione wrapper che fa lo stesso trucco:

field_collection_item_load($id, $reset = FALSE)

o come da commento, utilizzare:

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

per caricare più raccolte (ad esempio se si dispone di un pulsante Aggiungi altri ).


5
Secondo la risposta di @ vasiliy-grotov sopra puoi anche usare field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE), per caricare più raccolte (ad esempio se hai un "Aggiungi altro" btn).
mediaashley,

21

field_collection_field_get_entity () dovrebbe essere usato per caricare la revisione corretta.

Esempio di utilizzo:

$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
come ottenere i campi data assegnati nella raccolta campi? Ho usato la seguente cosa: $ item = field_collection_field_get_entity ($ itemid); print $ item-> field_course_starts_on ['und'] [0] ['safe_value']; Ma nessun valore viene stampato per questo.
harikris,

Grazie per questo. Stavo diventando costante Avviso: array_flip (): posso solo capovolgere i valori STRING e INTEGER! con ... item_load () e questo ha risolto il problema.
Naidim,

11

È possibile utilizzare entity_metadata_wrapperdal modulo API Entity :

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

Puoi anche eseguire il loop di tutte le raccolte:

$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);
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.