0

私は Drupal 7 とエンティティ モジュールを使用しています。プロパティと呼ばれるコンテンツ タイプの設定があります。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 配列です。しかし、その値は空です。

私は何を間違っていますか?

https://drupal.org/node/1021556

4

2 に答える 2

1

set() メソッドを前述の revagomes として使用するか、魔法のメソッド __set() を使用しました

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

そして、この方法の方がはるかに読みやすいです ;) コードレビュー担当者に感銘を与えてください :p

于 2014-12-05T13:25:25.167 に答える
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 に答える