Come accedere a un'etichetta selezionata anziché a valore


12

Ho un elenco selezionato di stati:

AL|Alabama
AK|Alaska
AZ|Arizona
AR|Arkansas

Nel codice per accedere al valore di stato selezionato posso eseguire il codice in questo modo:

...
$entity->get('field_state')->value;
...

Ottengo valori come AL o AK. Come posso ottenere etichette come l'Alabama o l'Alaska?



1
Ciò vale solo per ottenere l'etichetta del campo. Sto cercando un valore selezionato da un elenco selezionato.
albertski,

Risposte:


20

Non sono sicuro se esiste un modo migliore, ma ho ottenuto il valore ottenendo prima i valori consentiti.

$allowed_values = $state->getFieldDefinition('field_state')->getFieldStorageDefinition()->getSetting('allowed_values');
$state_value = $state->get('field_state')->value;
$info['state_name'] = $allowed_values[$state_value];

5
Ottenere i valori consentiti è sostanzialmente il modo giusto, ma ottenerlo può essere più semplice: $ state-> getFieldDefinition ('field_state') -> getFieldStorageDefinition () -> getSetting ('allowed_values').
Berdir,

3

Il modo corretto è utilizzare la funzione options_allowed_values ​​() . Perché il campo potrebbe non avere l'impostazione "ammessi_valori" e le opzioni possono essere fornite tramite la funzione "consentito_valori".

Esempi dal vivo:

Caso n. 1: si dispone di un oggetto entità e si desidera ottenere un'etichetta del valore del campo con opzioni.

$field_name = 'field_state';

/** @var \Drupal\Core\Field\FieldStorageDefinitionInterface $field_definition */
$field_definition = $entity->{$field_name}->getFieldDefinition();

// This is a list (array) of options for the field definition:
// [{option1_key} => {option1_value}, {option2_key} => {option2_value}, ...]
$field_allowed_options = options_allowed_values($field_definition, $entity);

// If the field is NOT multiple.
/** @var string|\Drupal\Component\Render\MarkupInterface $field_value_label */
$field_value_label = $field_allowed_options[$entity->{$field_name}->value];

// If the field is multiple.
$field_value = array_column($entity->{$field_name}->getValue(), 'value', 'value');
/** @var string[]|\Drupal\Component\Render\MarkupInterface[] $field_value_labels */
$field_value_labels = array_intersect_key($field_allowed_options, $field_value);

Caso n. 2: non si dispone di un oggetto entità ma si desidera ottenere un elenco di tutte le opzioni consentite del campo dell'entità.

$entity_type_id = 'node';
$field_name = 'field_state';

$entity_fields_definitions = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions($entity_type_id);

/** @var \Drupal\Core\Field\FieldStorageDefinitionInterface $field_definition */
$field_definition = $entity_fields_definitions[$field_name];
$field_allowed_options = options_allowed_values($field_definition);

Benvenuto in Drupal Answers! Solo curioso, dove si trova ora l'etichetta che OP chiede? Dentro $allowed_options?
leymannx,

Grazie! Sì, era all'interno di $ allowed_options. Ho modificato la mia risposta e aggiunto esempi.
entità

0

drupal 7 vie:

$jid = $row->job_id_181;
if($jid)
{
    $jobNode = node_load($params['jid']);
    $key = $jobNode->field_job_location['und'][0]['value'];//2
    if($key)
    {
        $field = field_info_field('field_job_location');
        $label = $field['settings']['allowed_values'][$key];
        echo $label;
    }

}

Spero che aiuti qualcuno in futuro.


0

Questo potrebbe aiutare anche:

$node->field_state->getFieldDefinition()->getSetting('allowed_values');
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.