Как получить доступ к выбранной метке вместо значения

12

У меня есть список избранных штатов:

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

В коде для доступа к выбранному значению состояния я могу запустить код так:

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

Я получаю значения, такие как AL или AK. Как я могу получить ярлыки как Алабама или Аляска?

albertski
источник
Возможный дубликат: drupal.stackexchange.com/questions/201064/…
Крис Хэппи
1
Это относится только к получению метки поля. Я ищу выбранное значение из списка выбора.
Альбертски

Ответы:

20

Не уверен, что есть лучший способ, но я получил значение, получив сначала допустимые значения.

$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
источник
5
Получение допустимых значений в основном правильный путь, но получить его можно проще: $ state-> getFieldDefinition ('field_state') -> getFieldStorageDefinition () -> getSetting ('allow_values').
Бердир
3

Правильный способ - использовать функцию options_allowed_values ​​() . Поскольку поле может не иметь настройки «allow_values», а опции могут быть предоставлены через функцию «allow_values_function».

Живые примеры:

Случай № 1: у вас есть объект-сущность, и вы хотите получить метку значения поля с опциями.

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

Случай № 2: у вас нет объекта сущности, но вы хотите получить список всех разрешенных опций поля сущности.

$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);
организация
источник
Добро пожаловать в ответы Drupal! Просто любопытно, где сейчас лейбл, который запрашивает OP? Внутри $allowed_options?
leymannx
Спасибо! Да, это было внутри $ allow_options. Я отредактировал свой ответ и добавил примеры.
юридическое лицо
0

друпал 7 путь:

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

}

Надеюсь, это поможет кому-то в будущем.

разработчик
источник
0

Это также может помочь:

$node->field_state->getFieldDefinition()->getSetting('allowed_values');
Риши Кулшрештха
источник