web-dev-qa-db-ja.com

エンティティの場所フィールドに書き込むにはどうすればよいですか?

Micronewsというカスタムエンティティがあり、その中にマイクロアップデートのバンドルが作成されています。すべてのフィールドのdbにエンティティを書き込むことはできますが、ロケーションモジュールを使用してロケーションを書き込む方法を理解できません。複数のテーブルのdbに格納されているようです。場所をデータベースに保存する標準的な方法はありますか?

function p_save_entity($name, $issue_type, $constituency, $location){

$name = "Testing programmatically";
$issue_type = "electricity";
$constituency = '22';


$e = entity_create('micronews', array(
    'type' => 'microupdate',
    'name'=>$name,
    'created'=> time(),

));

$ew = entity_metadata_wrapper('micronews' ,$e);

$ew->field_type->set($issue_type);
$ew->field_constituency->set($constituency);

$ew->field_location[latitude]->set('65.000000');
$ew->field_location[longitude]->set('65.000000');

$fl = $ew->save();

if ($fl){
    return "";
}

else{
    return "Something went wrong";
}

私は このモジュールを使用しています

2
Sandesh Yadav

これは機能しますが(これはトリックです)、locationに付属するlocation_entityモジュールを有効にした場合のみです。

$location = array(
  'latitude' => $latitude,
  'street'   => $street,
  // etc, other elements added here ...
);

$ew->field_location->set($location);
$ew->save();

他の誰もがこれでこれほど多くの時間を失うことはありません。

3
Complex Views

私は、modulesフォルダーのlocation.testを参照します。具体的には testCreateLocation() のようなものです。

このコードは、場所フィールドに対して次のことを行います。

 135     $node = $this->drupalCreateNode(array(
 136       'type' => $location_type,
 137       'field_loctest' => array(
 138         array(
 139           'name' => $location1_name,
 140           'street' => '48072 289th St.',
 141           'province' => 'SD',
 142           'country' => 'us',
 143   //        'location_settings' => $settings,
 144         ),
 145       ),
 146     ));
 147     cache_clear_all();
 148 
 149     // Reload the node.
 150     $node2 = node_load($node->nid, NULL, TRUE);
 151     $location = $node2->field_loctest[0];
 152 
 153     $this->assertEqual($location1_name, $location['name'], t('Testing basic save/load'));

エンティティラッパーを使用すると、mightのようになります(場所がさまざまなデータから取得できる場合、テストではStreetを使用し、Lat/Longsを使用します)。

$ew->field_location->set(array(array('latitude' => 65.000000, 'longitude' => 34)));

私は以前にEntityAPIとラッパーを使用したことがありますが、すべてを記憶させるために常に使用することはありません。私はこの他のリンクが役に立ったと感じました: entity_metadata_wrapper()関数の目的は何ですか、なぜそれを使用する必要があるのですか?

上記のEntityAPIスレッドのリンクをたどると、ネストされた配列を使用して$profile_objectが作成されます...

1
tenken

遅い反応だが、誰かを助けると考えた。

「不明なデータプロパティfield_location」も私に起こります。エンティティがまだ初期化されていないためだと思いました。しかし、エンティティを作成してラッパーをリセットしても効果はありませんでした。次の回避策は問題を解決します。

$entity->{$drupal_field}['und'][0] = $location;
// This seems to be necessary
$entity->locations[0] = $location;
$resp = entity_save('node', $entity);
if ($resp == false) {
    // do something
}
0
cybertoast