"Imposta" la versione di field_get_items?


9

Si possono recuperare elementi di campo da un'entità con

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

Ma c'è un modo conveniente per fare il contrario, Core o altro?

// 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);

Vorrei evitare il fastidio di assegnare manualmente un termine $, andare a vedere in dettaglio l'aspetto della struttura dell'array e quindi costruire l'array a mano, poiché a volte non è banale.

L'unico problema nella coda principale che ho trovato che sembrava vagamente simile riguardava il linguaggio di campo api DX .

Risposte:


6

No, non esiste tale funzione.

Vedi il mio commento su Supporto linguistico per i campi entità .


1
Grazie Berdir. Speravo che ti fossi presentato;) e avevo anche paura che lo dicessi. Il problema con il codice nel tuo commento è che per molti campi, 'valore' potrebbe essere insufficiente o semplicemente sbagliato.
Letharion,

field_get_items () non ti aiuta neanche con quello, restituisce una matrice di elementi che contengono valore. O qualunque sia il tipo di campo definito. Non c'è modo di astrarlo.
Berdir,

Ad esempio, field_get_items () restituisce array (array ('tid' => 123)). Il tuo codice deve sapere che field_tags è un riferimento di termine di tassonomia e che ha impostato la chiave di tid e che è un riferimento a un termine di tassonomia.
Berdir,

I commenti non sono più visibili in quella pagina secondo il link indicato.
Junaid,

I commenti sono ora sulla pagina di discussione: drupal.org/node/1500308/discuss
Berdir

2

Perché una tale funzione esista, field_set_items()dovrebbe essere in grado di identificare l' stdClassoggetto come quello di un termine tassonomico, e anche mapparlo su una funzione che può decodificare l'oggetto e creare un array di campi da esso.

Dal momento che non esiste una funzione principale per farlo, non penso che sarà facile.


È terribilmente irritante il fatto che non ci sia $ entity-> entity_type (ancora) , ma a prescindere, potrebbe essere facilmente aggiunto al mio callback di esempio. Ho aggiornato la domanda per riflettere questo.
Letharion,

1
La mancanza di un entity_typenon è davvero il problema IMHO ... il problema è esattamente quello che hai aggiunto alla tua domanda: "a volte non è banale". Poiché i dati non sono banali, per field_set_itemsfunzionare come desiderato, ogni tipo di campo nel sistema dovrebbe implementare una sorta di interfaccia che descriva come decodificare l'array di dati da un oggetto / variabile arbitraria.
Clive

2

Anche se questo non aiuta a costruire la struttura dell'array a volte complicata, vedo che ciò che sto cercando è stato in una certa misura introdotto in Drupal 8. Forse sarà esteso ulteriormente in futuro. :)

Nuova API più semplice disponibile per l'accesso a campi, proprietà e informazioni sulla lingua .

Esempio di utilizzo dalla pagina collegata:

<?php
// Change a field value.
$body = $comment->get('comment_body');
$body[0]['value'] = 'This is actually a perverted tango';
$comment->set('comment_body', $body);
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.