我正在使用Drupal 7和实体模块,我有一个名为property的contenttype设置,我正在尝试做的是从xml文件创建内容类型,我有正确的数据,我正在使用entity_metadata_wrapper简化了对字段的插入:
以下是我正在使用的方法:
private function newProperty($propValues) {
global $user;
$values = array(
'type' => 'property',
'uid' => $user->uid,
'status' => 1,
'comment' => 1,
'promote' => 0,
);
$entity = entity_create('node', $values);
$ewrapper = entity_metadata_wrapper('node', $entity);
$ewrapper->title->value=$propValues->price_text;
$ewrapper->field_property_expert_agent_ref->value =$this->xml_attribute($propValues, 'reference');
foreach ($this->valuesToFetch() as $key=>$value) {
$ewrapper->{$value}->value=$propValues->$key;
}
$ewrapper->save();
entity_save('node', $entity);
}
$ propValues包含一系列值 $ this-> valuesToFetch()是一个key =>值数组,例如:'department'=>'field_property_department', 我添加了调试代码以确认值是否已经通过,ct被创建但其值为空。
我做错了什么?
答案 0 :(得分:1)
要使用entity_metadata_wrapper设置字段值,您必须使用->set()
方法或依赖magic methods来提供更多代码清晰度。
// 1. Using ->set()
// Single value
$wrapper->field_data->set($value);
// Multi value
$wrapper->field_data[]->set($value); // Add to field array
$wrapper->field_data[$delta]->set($value); // Set specific value
// 2. Using magic methods
// Single value
$wrapper->field_data = $value
// Multi value
$wrapper->field_data[] = $value; // Add to field array
$wrapper->field_data[$delta] = $value; // Set specific value
// 3. Deleting values
// 'Unset' a field value (there is no delete method)
$wrapper->field_data->set(NULL);
$wrapper->field_data = NULL;
Drupal 7 Entity metadata wrappers documentation. A good blog post that has some useful insights!
答案 1 :(得分:1)
使用set()方法作为提到的revagomes或魔术方法__set()
$wrapper->field_data = $value; // Maaaagic !
这种方式更具可读性;)给代码评论员留下深刻印象:p