วิธีเข้าถึงป้ายกำกับที่เลือกแทนค่า


12

ฉันมีรายการสถานะที่เลือก:

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

ในรหัสเพื่อเข้าถึงค่าสถานะที่เลือกฉันสามารถเรียกใช้รหัสเช่นนี้:

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

ฉันได้รับค่าเช่น AL หรือ AK ฉันจะรับป้ายกำกับเช่น Alabama หรือ Alaska ได้อย่างไร


สำเนาซ้ำที่เป็นไปได้: drupal.stackexchange.com/questions/201064/…
Chris Happy

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 ('allow_values')
Berdir

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 Answers! แค่อยากรู้ตอนนี้ OP กำลังขอฉลากอยู่ที่ไหน ข้างใน$allowed_options?
leymannx

ขอบคุณ! ใช่มันอยู่ใน $ allow_options ฉันแก้ไขคำตอบของฉันและเพิ่มตัวอย่าง
เอนทิตี

0

วิธี drupal 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.