返回

Drupal 多选列表:如何获取标签而非键

php

如何从 Drupal 站点的多选列表中获取值

问题陈述:从 Drupal 多选列表获取键而不是值

在使用 Drupal 构建网站时,需要从多选列表中获取选定值的标签(即其名称)。然而,使用错误的方法,例如直接访问 $category_value->value 会返回键,而不是预期的人类可读标签。

解决方案:使用 entity_metadata_wrapper

为了正确从多选列表中获取值,推荐使用 entity_metadata_wrapper。它是一个强大的函数,可用于获取字段的原始值,然后可以对其进行格式化以适合您的特定需求。

修改后的代码

以下是使用 entity_metadata_wrapper 修改后的代码示例:

$categorylist = array();
foreach ($node->get('field_category') as $category_value) {
  if ( !empty($category_value ) ){
    $categorylist[] = entity_metadata_wrapper('taxonomy_term', $category_value->target_id)->label();
 }
}

解释

  • entity_metadata_wrapper('taxonomy_term', $category_value->target_id) 获取分类术语的包装器对象。
  • ->label() 方法获取分类术语的标签(即其名称)。

Twig 模板

在 Twig 模板中,可以使用 |join(', ') 过滤器将数组中的元素连接成一个字符串,每个元素之间用逗号和空格分隔。修改后的 Twig 代码如下:

{% if categorylist %}
   {{ categorylist|join(', ') }}
{% endif %} 

其他注意事项

以下是一些其他需要考虑的重要事项:

  • 确保您的代码在 Drupal 8 及以上版本中运行,因为 entity_metadata_wrapper 函数在 Drupal 7 中不可用。
  • 考虑使用 field_collection 模块,它允许您创建包含多个值的可重复字段。这可以简化从多选列表中获取值的过程。

常见问题解答

  • 为什么直接访问 $category_value->value 会返回键而不是值?

    • 这是因为 $category_value->value 返回的是字段值的机器名称,而不是其人类可读的标签。
  • 如何处理空值?

    • 在处理空值时,请确保使用 !empty($category_value) 条件来过滤掉它们。
  • 是否可以使用其他方法来获取值?

    • 虽然 entity_metadata_wrapper 是获取值的首选方法,但也可以考虑使用其他函数,如 field_get_items()field_view_value()
  • 如何使用 field_collection 模块?

    • 有关如何使用 field_collection 模块的信息,请参考 Drupal 文档。
  • 是否还有其他建议用于处理多选列表?

    • 考虑使用 Select2 或 Chosen 等库来增强多选列表的用户体验。

结论

通过使用 entity_metadata_wrapper,您可以轻松可靠地从 Drupal 站点的多选列表中获取值。遵循本文中概述的步骤,您将能够获取所需的数据,并将其有效地整合到您的应用程序中。