So greifen Sie auf ein ausgewähltes Etikett anstelle eines Werts zu

12

Ich habe eine ausgewählte Liste von Staaten:

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

Im Code für den Zugriff auf den ausgewählten Statuswert kann ich Code wie folgt ausführen:

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

Ich bekomme die Werte wie AL oder AK. Wie kann ich die Labels wie Alabama oder Alaska bekommen?

albertski
quelle
Mögliches Duplikat: drupal.stackexchange.com/questions/201064/…
Chris Happy
1
Das betrifft nur die Beschriftung des Feldes. Ich suche einen ausgewählten Wert aus einer Auswahlliste.
Albertski

Antworten:

19

Ich bin mir nicht sicher, ob es einen besseren Weg gibt, aber ich habe den Wert erhalten, indem ich zuerst die zulässigen Werte erhalten habe.

$allowed_values = $state->getFieldDefinition('field_state')->getFieldStorageDefinition()->getSetting('allowed_values');
$state_value = $state->get('field_state')->value;
$info['state_name'] = $allowed_values[$state_value];
albertski
quelle
5
Das Abrufen der zulässigen Werte ist grundsätzlich der richtige Weg, aber das Abrufen kann einfacher sein: $ state-> getFieldDefinition ('field_state') -> getFieldStorageDefinition () -> getSetting ('allow_values').
Berdir
1

Der richtige Weg ist die Verwendung der Funktion options_allowed_values ​​() . Da das Feld möglicherweise nicht die Einstellung "erlaubte_Werte" hat und Optionen über die Funktion "erlaubte_Werte_" bereitgestellt werden können.

Live-Beispiele:

Fall 1: Sie haben ein Entitätsobjekt und möchten eine Beschriftung des Feldwerts mit Optionen erhalten.

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

Fall 2: Sie haben kein Entitätsobjekt, möchten jedoch eine Liste aller zulässigen Optionen des Felds der Entität erhalten.

$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);
Entität
quelle
Willkommen bei Drupal Answers! Nur neugierig, wo ist das Label, nach dem OP jetzt fragt? Drinnen $allowed_options?
Leymannx
Vielen Dank! Ja, es war in $ allow_options. Ich habe meine Antwort bearbeitet und Beispiele hinzugefügt.
Entität
0

Drupal 7 Weg:

$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;
    }

}

Hoffe, es hilft jemandem in Zukunft.

Entwickler
quelle
0

Dies könnte auch helfen:

$node->field_state->getFieldDefinition()->getSetting('allowed_values');
Rishi Kulshreshtha
quelle