drupal 7:如何访问list-field的键而不是其标签(field api)

时间:2013-04-12 16:56:33

标签: drupal drupal-7 drupal-theming

我正在制作一个自定义主题并且用Google搜索了一整天,但找不到我的问题的答案:

如何打印出一个cck list字段的键而不是它的标签?

我认为这是通过字段api访问字段的正确方法,对吧? 所以我试试

$output = field_view_field('node', $node, 'field_list');
print render($output);

这似乎是获取键|标签对的标签值的方法。但即使我将显示选项格式设置为'key' - 它也只打印标签值。我做错了什么?

我知道有其他选项可以渲染密钥,但是如何使用字段api?

2 个答案:

答案 0 :(得分:4)

您可以使用field_get_items()获取字段值本身(这将是允许值数组键):

$items = field_get_items('node', $node, 'field_list');
$key = $items[0]['value'];

如果您需要在任何时候再次匹配这些,您可以从字段元数据中获取完整的键/值列表:

$info = field_info_field('field_list');
$values = $info['settings']['allowed_values'];
$label = $values[$key];

答案 1 :(得分:1)

这是类似的方式。此示例适用于具有ISO代码的国家/地区列表。 我们的想法是呈现所选国家/地区的名称,因为转储只返回密钥(在这种情况下为iso代码)

后端选择列表的格式:

AR|Argentina
US|United States

假设您在后端选择了美国,并且想要在节点模板上打印国家/地区名称:

$country_field = field_info_field('field_country_iso');
$country_iso = $node->field_country_iso[LANGUAGE_NONE][0]['value'];
$country_name = $country_field['settings']['allowed_values'][$country_iso];

然后

print $country_name; // This will return United States, not US code

我希望这会有所帮助。