“设置” field_get_items版本?


9

可以使用以下方法从实体检索字段项目

// Find all terms on $node in field 'field_tags'.
$terms = field_get_items('node', $node, 'field_tags');

但是,是否有一种方便的方法来进行反向,Core或其他方式?

// Attach new term $term to $node in field 'field_tags'.
$term = taxonomy_term_load($tid);
$node = field_set_items('node', $node, 'field_tags', 'taxonomy_term', $term);
node_save($node);

我想避免手动分配$ term的麻烦,请研究一下数组结构的外观,然后手动构建数组,因为有时这是不平凡的。

我可以发现核心队列中唯一看起来有些相似的问题是关于现场语言api DX的

Answers:


6

不,没有这样的功能。

请参阅我对实体字段的语言支持的评论。


1
谢谢伯迪尔。我希望你能出现;),我也害怕你会这样说。您注释中的代码存在的问题是,对于许多字段,“值”可能不足或完全错误。
Letharion

field_get_items()也不帮助您,它返回包含值的项目数组。或字段类型定义的任何内容。没有办法将其抽象化。
Berdir '04

例如,field_get_items()返回array(array('tid'=> 123))。您的代码需要知道field_tags是一个分类术语引用,并且它具有tid键集并且它是一个分类术语的参考。
Berdir

根据给定的链接,该评论在该页面上不再可见。
Junaid

评论现已在讨论页面上:drupal.org/node/1500308/discuss
Berdir 2016年

2

为了存在这样的功能,field_set_items()将需要能够将stdClass对象识别为分类术语的对象,并将其映射到可以对该对象进行解码并从中创建字段数组的函数。

由于没有执行此操作的核心功能,因此我认为这并不容易。


令人不快的是,还没有$ entity-> entity_type属性(yet),但是无论如何,可以很容易地将其添加到我的示例回调中。我更新了问题以反映这一点。
Letharion

1
缺少entity_typeIMHO并不是真正的问题……问题恰恰是您添加到问题中的内容:“有时是不平凡的”。因为数据是不平凡的,所以field_set_items要想按需工作,系统中的每种字段类型都需要实现某种接口,以描述如何从对象/任​​意变量对数据数组进行逆向工程。
克莱夫(Clive)

2

尽管这无助于构建有时复杂的数组结构,但我发现我所寻找的东西在某种程度上已在Drupal 8中引入。也许将来会进一步扩展。:)

新的更简单的API可用于访问字段,属性和语言信息

链接页面的用法示例:

<?php
// Change a field value.
$body = $comment->get('comment_body');
$body[0]['value'] = 'This is actually a perverted tango';
$comment->set('comment_body', $body);
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.