📅  最后修改于: 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;
}