मूल्य के बजाय चयनित लेबल तक कैसे पहुंचें


12

मेरे पास राज्यों की एक चुनिंदा सूची है:

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

चयनित राज्य मान का उपयोग करने के लिए मैं इस तरह कोड चला सकता हूं:

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

मुझे एएल या एके जैसे मूल्य मिलते हैं। मैं अलबामा या अलास्का जैसे लेबल कैसे प्राप्त कर सकता हूं?


संभावित डुप्लिकेट: 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];

5
अनुमत मान प्राप्त करना मूल रूप से सही तरीका है, लेकिन इसे प्राप्त करना आसान हो सकता है: $ स्थिति-> getFieldDefinition ('field_state') -> getFieldStorageDefinition () -> getSetting ('allow_values')।
बेदिर

3

उचित तरीका option_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 उत्तर में आपका स्वागत है! बस जिज्ञासु, अब लेबल कहां है ओपी पूछ रहा है? अंदर $allowed_options?
लीमैनक्स

धन्यवाद! हाँ, यह $ 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;
    }

}

आशा है कि यह भविष्य में किसी को मदद करेगा।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.