私のモジュールでは、ノードのコンテンツに基づいてjsonを生成しています。
_$node = node_load($nid);
_
ノードのフィールドの1つは、List (text)
タイプのfield_sport_typeです。許可される値は次のようになります。
_mens-surfing|Men's Surfing
womens-surfing|Women's Surfing
junior-mens-surfing|Junior Men's Surfing
junior-womens-surfing|Junior Women's Surfing
skate|Skate
_
Var_dump($ node)を実行すると、field_sport_typeセクションは次のようになります。
_["field_sport_type"]=>
array(1) {
["und"]=>
array(1) {
[0]=>
array(1) {
["value"]=>
string(14) "womens-surfing"
}
}
}
_
したがって、「値」は許可された値のキーですが、キーではなくラベルを取得します。つまり、_womens-surfing
_は必要ありません。_Women's Surfing
_を取得します。
リスト(テキスト)のラベルにアクセスするにはどうすればよいですか?
list_allowed_values を使用して、値のリストをキー配列として取得し、それを使用して、任意のロジックで「キー」を表示できます。
APIコメントセクションの例は次のとおりです。
<?php
/*
assuming there's a field named machine name is 'field_my_field_name' whose
type is a list (float, integer or text), and you want to get the values that
were entered into the "Allowed values list" textarea on the edit screen for the field
*/
$all_fields_on_my_website = field_info_fields();
$allowed_values = list_allowed_values($all_fields_on_my_website["field_my_field_name"]);
/*
$allowed_values is now an array of $key=>value pairs that
can be dropped into the '#options' value for a form field array, for instance
*/
//example:
$form = array();
$form['my_form_element'] = array(
'#type' => 'select',
'#title' => t('Choose something, sucka!'),
'#description' => t('Descriptive text under form elements rather than above them is a great UX choice, really.'),
'#options' => $allowed_values,
);
return $form;
drupalの「フィールド」であることは、バンドルに添付されたリストフィールドインスタンスには、アイテムのカスタムリスト、デフォルト値、必須かどうかなど)の構成と設定があります。
エンティティメタデータラッパーを使用して、簡単な方法でキーラベルにアクセスできます。
$wrapper = entity_metadata_wrapper('node', $nid);
$label = $wrapper->field_sport_type->label();
または、node_load()でロードされた$ nodeを使用します。
$wrapper = entity_metadata_wrapper('node', $node);
$label = $wrapper->field_sport_type->label();
Entity API モジュールが必要になりますが、このモジュールはカスタムモジュールコーディングでほぼ必須であると思います。