通过托管实体对象和包装器访问Drupal 7中的位置字段

时间:2013-10-10 18:03:23

标签: drupal-7

我正在使用Drupal 7的位置模块(特别是其位置CCK部分)。向用户添加位置字段“field_location”(作为托管实体的示例),并在用户编辑界面中为测试用户初始化位置值。但是,我无法访问当前用户的位置数据:

global $user;
$user_id = $user->uid;

$loc = $user->field_location;

或:

$wrapper = entity_metadata_wrapper('user', $user_id);
$loc = $wrapper->field_location;

使用$ loc的语句不适用于对象和包装器(同时用户对象和包装器都已成功初始化)。同样的:

$loc = $wrapper->field_location[0];
$loc = $wrapper->field_location->raw();

我已经阅读了很多有关此主题的帖子,但是没有找到可行的解决方案,会对此有所了解。

1 个答案:

答案 0 :(得分:3)

位置模块本身不支持开箱即用的Entity API / Metadata Wrapper。但是,它与Location Entity模块一起打包,这将使其能够支持实体api。

启用后,

$wrapper = entity_metadata_wrapper('user', $user_id);
$loc = $wrapper->field_location->value();

按预期工作。

如果您想要快速解决方法,您也可以这样做:

$user_wrapper = entity_metadata_wrapper('user', $user_id);
$raw_user = $user_wrapper->raw();
$loc = $raw_user->field_location['und'][0];

这并不优雅,但它是一个没有额外模块的解决方案。随便挑选。