0

我正在使用 Drupal 7 和实体模块,我有一个名为 property 的内容类型设置,我正在尝试从 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=>value 数组,例如:'department'=>'field_property_department',我添加了调试代码以确认这些值正在通过,ct 被创建但它的值为空。

我究竟做错了什么?

https://drupal.org/node/1021556

4

2 回答 2

1

为了使用 entity_metadata_wrapper 设置字段值,您必须使用->set()方法或依赖可以提供更多代码清晰度的魔术方法。

// 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 实体元数据包装器文档。 一篇很好的博文,有一些有用的见解!

于 2013-12-05T21:02:07.407 回答
1

使用 set() 方法作为提到的 revagomes 或魔术方法 __set()

$wrapper->field_data = $value; // Maaaagic !

而且这种方式更具可读性;)去打动您的代码审查员:p

于 2014-12-05T13:25:25.167 回答