값 대신 선택된 레이블에 액세스하는 방법


12

상태 선택 목록이 있습니다.

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

선택한 상태 값에 액세스하는 코드에서 다음과 같은 코드를 실행할 수 있습니다.

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

AL 또는 AK와 같은 값을 얻습니다. 앨라배마 나 알래스카와 같은 라벨은 어떻게 구할 수 있습니까?



1
그것은 단지 필드의 레이블을 얻는 것과 관련이 있습니다. 선택 목록에서 선택한 값을 찾고 있습니다.
albertski

답변:


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];

5
허용되는 값을 얻는 것이 기본적으로 올바른 방법이지만 $ state-> getFieldDefinition ( 'field_state')-> getFieldStorageDefinition ()-> getSetting ( 'allowed_values')보다 쉽게 ​​얻을 수 있습니다.
Berdir

3

올바른 방법은 options_allowed_values ​​() 함수 를 사용하는 것입니다 . 필드에 "allowed_values"설정이 없을 수 있으므로 "allowed_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 Answers에 오신 것을 환영합니다! 궁금한 점이 있으시면 지금 OP 라벨이 요구하는 위치는 어디입니까? 내부 $allowed_options?
leymannx 2016 년

감사! 예, $ allowed_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;
    }

}

앞으로 도움이 되길 바랍니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.