Entity Matadata Wrapper

3 contenuti / 0 new
Ultimo contenuto
Entity Matadata Wrapper

Devo leggere e aggiornare dei campi nel profilo utente in base ai dati inseriti nel nodo e, per evitare di ricorrere a molti node_load(), user_load(), ho pensato di utilizzare Entity Metadata Wrapper.

Nel mio modulo ho questo codice:

<?php
function miomodulo_node_insert($node) {
 
// Leggo i valori dall'utente e da tabella esterna
 
$emw = entity_metadata_wrapper('node', $node);
 
$c1 = $emw->author->field_campo_testo->value();
 
$c2 = $emw->author->field_campo_testo->value();
 
$c3 = $emw->author->field_campo_entity_reference->field_tabella_esterna->value();
 
// faccio i miei calcoli
 
$nuovo_valore1 = ...
 
$nuovo_valore2 = ...
 
// Aggiorno i campi utente
 
$emw->author->field_campo_testo->set( $nuovo_valore1 );
 
$emw->author->field_campo_testo->set( $nuovo_valore2 );
 
$emw->save();
}
?>

Mentre in lettura il metodo value() mi permette di leggere il valore dei campi anche attraversando diverse tabelle (node->user->node->value()) non riesco a salvare le modifiche: sembra che il metodo save() non funzioni, o meglio, forse funziona solamente sul wrapper principale, nel mio caso il primo node.
Ho provato a fare le assegnazioni anche senza set(), come spiegato qui:
<?php
 $emw
->author->field_campo_testo = $nuovo_valore1;
?>

ma non cambia nulla.

Qualcuno mi sa dare qualche indicazione?

Drupal Version:

Ciao,
domanda veloce: che campi sono quelli che cerchi di settare? solamente testo?un array di campi di testi o altro?Rispetti cioè che ti richiede il campo come dato?

Grazie Luca per la tempestiva risposta, ma ho capito l'errore madornale che stavo facendo: ho inserito il mio codice nel hook_node_insert(), ma da qui non posso più modificare nulla.
Ho spostato il codice nell'hook_node_presave() ed ora funziona tutto.

Grazie.