获取所有内容类型的列表


10

如何获得在Drupal 8站点中定义的所有内容类型的列表?

在Drupal 7中,它曾经是node_type_get_types(),但已被弃用。

我尝试过,Entity::loadMultiple()但似乎没有用。我当时正在考虑进行自定义查询,但是我不知道它如何存储在数据库中。

Answers:


21

loadMultiple() 为此应该很好:

$types = \Drupal::entityTypeManager()
  ->getStorage('node_type')
  ->loadMultiple();

16

您可以使用NodeType类加载所有NodeType实体(配置实体):

$node_types = \Drupal\node\Entity\NodeType::loadMultiple();
// If you need to display them in a drop down:
$options = [];
foreach ($node_types as $node_type) {
  $options[$node_type->id()] = $node_type->label();
}

2
使用static loadMultiple()load()create()方法的诀窍是在您要使用的实体类型类上调用它们,然后找出类型并动态地执行上述操作。这有点短并且易于使用,但是建议尽可能使用注入的服务,因此在服务/控制器/插件中,您将注入实体类型管理器,然后使用它。允许进行更轻松的(单元)测试,但结果大致相同。
贝尔迪尔

1

从8.7开始,不推荐使用另一个Drupal帮助器功能。node_type_get_names()返回:

string []节点类型标签的数组,由节点类型名称作为键。

API文档


如果您需要填写表单选择(或复选框)选项,这是最简单的解决方案。
TytooF

0

如果node_type_get_names()将来不推荐使用(也是一个很好的array_map用法示例):

function node_type_get_names() {
  return array_map(function ($bundle_info) {
    return $bundle_info['label'];
  }, \Drupal::service('entity_type.bundle.info')
    ->getBundleInfo('node'));
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.