📜  drupal 8 获取字段实体 (1)

📅  最后修改于: 2023-12-03 15:30:34.273000             🧑  作者: Mango

Drupal 8 获取字段实体

要获取实体字段,首先需要知道实体的类型和 ID。以获取文章实体为例,可以使用node_load()函数获取节点对象。以下代码将获取 ID 为 123 的文章实体对象:

$node = node_load(123);

要获取实体的特定字段,您可以使用Entity API提供的Entity Field Query(EFQ)来构建查询操作。以下代码将返回文章实体的标签字段:

$query = \Drupal::entityQuery('node')
  ->condition('status', 1)
  ->condition('type', 'article')
  ->condition('nid', 123);
$entity_id = $query->execute();
$node = \Drupal::entityTypeManager()->getStorage('node')->load(reset($entity_id));

$tags = $node->get('field_tags')->getValue();

在以上示例代码中,我们使用了 Entity Field Query(EFQ) 对 node 实体进行了一些过滤条件,然后使用 getStorage() 方法加载 node 实体。最终我们通过 get() 方法得到了 field_tags 字段的值(数组格式),并将其赋值给 $tags 变量。

返回的 $tags 值是一个数组,其中每个元素都是标签名和对应的标签 ID。如果想要将其转换为 markdown 的形式,可以使用以下代码:

$tags_md = '';
foreach ($tags as $tag) {
  $tags_md .= '[' . $tag['name'] . '](/taxonomy/term/' . $tag['target_id'] . ') ';
}

我们通过循环遍历 $tags 数组,然后把每个标签转换为 Markdown 链接的形式。name 属性是标签名,target_id 是标签的 ID。最终将转换后的 Markdown 内容保存在 $tags_md 变量中。

下面是完整的代码片段(按照 markdown 格式展示):

/**
 * Get tags of a node and return as Markdown.
 *
 * @param int $nid
 *   The node ID.
 *
 * @return string
 *   Markdown tags.
 */
function get_node_tags($nid) {
  $query = \Drupal::entityQuery('node')
    ->condition('status', 1)
    ->condition('type', 'article')
    ->condition('nid', $nid);
  $entity_id = $query->execute();
  $node = \Drupal::entityTypeManager()->getStorage('node')->load(reset($entity_id));

  $tags = $node->get('field_tags')->getValue();

  $tags_md = '';
  foreach ($tags as $tag) {
    $tags_md .= '[' . $tag['name'] . '](/taxonomy/term/' . $tag['target_id'] . ') ';
  }

  return $tags_md;
}