你熟悉entity_metadata_wrapper
么?如果不熟悉,那么赶快补课吧。
Entity Metadata Wrapper(实体元数据封装),在模块开发过程中对Field的操作来说,是最正确,也是最简单的方式。没错,在CCK年代,我们对Node中Field的操作熟练无比,不过现在看来,那些代码真的很邋遢。
##干净的代码!
以前是:
field_first_name)) {
$name = $node->field_first_name[LANGUAGE_NONE][0]['value'];
}
?>
现在可以把它浓缩成这样:
field_first_name->value();
?>
entity_metadata_wrapper
这个好长的单词有点点吓人,不过他的确让代码干净了。如果要处理一个实体引用字段,或者文件字段,只要这样子:
field_image->value();
?>
引用字段在这里已经载入成为了对象,而不只是一个FID了。
##实体引用的处理:比干净还干净!
假设你有两种Node类型:员工和部门。员工Node中有一个指向部门的实体引用字段,部门Node又一个叫做field_dept_phone
的字段保存了部门的电话号码(为了行文方便,我们假设部门字段是必填的)。
如果拿到一个员工Node,如何取到电话号码呢?
高难度动作:
field_employee_dept[LANGUAGE_NONE][0]
['target_id']);
if ($department && !empty($department->field_dept_phone[LANGUAGE_NONE][0]
['value'])) {
$phone = $department->field_dept_phone[LANGUAGE_NONE][0]['value'];
}
?>
Wrapper的办法:
field_employee_dept->field_dept_phone->value();
?>
##然后?
嗯,这个帖子并不是想做一个完整的entity metadata wrapper
教学。如果上面的描述吸引了你,请花15分钟来完成下面的事情:
-
下载Entity API。
-
你的生活质量代码质量同步上升。。
文章来源于互联网:entity_metadata_wrapper极简说明