Devo salvare un nuovo valore in un campo su un'entità e mi chiedevo se fosse possibile utilizzare entity_metadata_wrapper o è possibile solo impostare un valore esistente?
$wrapper->vimn_related_subjects[] = $value;
?
Devo salvare un nuovo valore in un campo su un'entità e mi chiedevo se fosse possibile utilizzare entity_metadata_wrapper o è possibile solo impostare un valore esistente?
$wrapper->vimn_related_subjects[] = $value;
?
Risposte:
Quando si ha a che fare con campi multi-valore, l'oggetto wrapper metadati entità associata è un'istanza di EntityListWrapper (potrebbe essere una buona idea esplorare l'API per esaminare i metodi disponibili. Si noti inoltre che questa classe implementa l' interfaccia ArrayAccess )
Quindi il modo più semplice per aggiungere nuovi valori a un EntityListWrapper è usare l'operatore "[]":
$wrapper->field_example[] = $new_value;
Questo crea una nuova voce e gli assegna il valore. Con questi metodi, il delta (l'offset all'interno dell'elenco di valori) viene creato automaticamente. Puoi anche impostare tu stesso l'offset, se lo desideri. Uno dei tre seguenti metodi è equivalente:
$wrapper->field_example[$delta] = $new_value;
$wrapper->field_example->offsetSet($delta, $new_value);
$wrapper->field_example->get($delta)->set($new_value);
In tutti e tre i casi, questo sovrascriverà i valori se il delta esiste già e, in caso contrario, creerà una nuova voce.
È inoltre possibile impostare direttamente una matrice di valori sul campo stesso. Entrambi i metodi sono equivalenti:
$value = array
0 => array('property_example' => 'hello'),
1 => array('property_example' => 'world')
);
$wrapper->field_example = $value;
$wrapper->field_example->set($value);
Tuttavia, ciò richiede di conoscere la struttura interna del campo a cui si sta assegnando poiché non si utilizza il wrapper di metadati del campo.
Finalmente puoi svuotare un campo multi valore impostandolo su un valore vuoto. Tutti e tre i metodi sono equivalenti:
$wrapper->field_example->set();
$wrapper->field_example = array();
$wrapper->field_example = NULL;
$w->field_allowed_regions->set(array(null));
è l'unica opzione di cancellazione che ha funzionato per il mio campo di riferimento tassonomia multi-valore.