Cách truy cập nhãn đã chọn thay vì giá trị


12

Tôi có một danh sách chọn các tiểu bang:

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

Trong mã để truy cập giá trị trạng thái đã chọn, tôi có thể chạy mã như thế này:

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

Tôi nhận được các giá trị như AL hoặc AK. Làm thế nào tôi có thể có được các nhãn như Alabama hoặc Alaska?



1
Điều đó chỉ liên quan đến việc có được nhãn của trường. Tôi đang tìm kiếm một giá trị được chọn từ một danh sách lựa chọn.
albertski

Câu trả lời:


19

Không chắc có cách nào tốt hơn không nhưng tôi đã nhận được giá trị bằng cách lấy các giá trị được phép trước.

$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
Nhận các giá trị được phép về cơ bản là đúng cách, nhưng việc nhận được có thể dễ dàng hơn: $ state-> getFieldDefDef ('field_state') -> getFieldStorageDefDef () -> getSetting ('allow_values').
Berdir

1

Cách thích hợp là sử dụng hàm Options_allowed_values ​​() . Bởi vì trường có thể không có cài đặt "allow_values" và các tùy chọn có thể được cung cấp thông qua "allow_values_function".

Ví dụ trực tiếp:

Trường hợp # 1: Bạn có một đối tượng thực thể và muốn lấy nhãn của giá trị của trường với các tùy chọn.

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

Trường hợp 2: Bạn không có đối tượng thực thể nhưng bạn muốn có một danh sách tất cả các tùy chọn được phép của trường của thực thể.

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

Chào mừng đến với câu trả lời của Drupal! Chỉ tò mò, hiện tại nhãn OP đang yêu cầu ở đâu? Bên trong $allowed_options?
leymannx

Cảm ơn! Vâng, nó nằm trong $ allow_options. Tôi chỉnh sửa câu trả lời của tôi và thêm ví dụ.
thực thể

0

drupal 7 cách:

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

}

Hy vọng nó sẽ giúp một ai đó trong tương lai.


0

Điều này cũng có thể giúp:

$node->field_state->getFieldDefinition()->getSetting('allowed_values');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.