値の代わりに選択したラベルにアクセスする方法


12

州の選択リストがあります:

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

選択した状態値にアクセスするコードでは、次のようなコードを実行できます。

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

ALやAKなどの値を取得します。アラバマやアラスカのようなレーベルはどうやって入手できますか?



1
それは、フィールドのラベルを取得することにのみ関係します。選択リストから選択した値を探しています。
albertski 2017年

回答:


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

2

適切な方法は、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

ありがとう!はい、それは$ allowed_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.