返回
Drupal 多选列表:如何获取标签而非键
php
2024-03-18 14:36:16
如何从 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 站点的多选列表中获取值。遵循本文中概述的步骤,您将能够获取所需的数据,并将其有效地整合到您的应用程序中。