it-swarm-ja.com

プログラムでエンティティを作成Drupal

エンティティ構築キットを介してエンティティを作成しました。最初はルールを使用して新しいエンティティを作成したかったのですが、エンティティがフィールド化されており、フィールドがルールに公開されません(現在、誰かがそのパッチに取り組んでいます) )しかし、intermでは、エンティティを作成する単純な関数を書きたかったのですが、これはプログラムでノードを作成するようなものだと思いましたが、これを4時間ほど続けていて、1インチも得ていません。私はentity_createとentity_saveを持っていますが、それらはあまり機能せず、それに関するドキュメントを見つけることができません。

私が見たいのは、フィールド化されたeckで、またはコードを通じて作成されたバンドルからサンプルエンティティを作成する方法です。

本当にありがとう

編集:最後に理解する必要があるのは、エンティティにアタッチされているフィールドの名前を指定して、それらの値も入力できるようにする方法です。

$values = array('uid' => 1, 'field_receipt_prod_ref' => 1, 'type' => 'receipt');        
$new_ent = entity_create('receipt', $values)->save();
7
Antonio Torres

あなたが持っているもののほとんどはそれほど悪く見えません。欠落しているフィールドの重要な点は、フィールドに言語があり、複数値である可能性があり、値は通常「値」サブキーに格納されることです。 refフィールドはnodereferenceであると想定しています。つまり、実際にはnidではなくvalueを使用して格納されます。

これがどのように構造化されているかを確認する最も簡単な方法は、Develモジュールをインストールし、Develタブを使用して構造を確認することです。 ECKエンティティで表示されるかどうかはわかりませんが、ノードの場合は表示されます。

これを試して:

$new_ent = entity_create('receipt', array(
  'uid' => 1,
  'type' => 'receipt', //bundle
  'field_receipt_prof_ref' => array(      
    LANGUAGE_NONE => array(
      0 => array(
        'nid' => 1,
      ),
    ),
  ),
))->save();
15
loganfsmyth

より簡単な方法は entity_metadata_wrapper() を使用することです。

$e = entity_create($entityType, array('type' => $bundleName));
$ew = entity_metadata_wrapper($entityType, $e);
$ew->field_name->set('value');
$ew->save();
27
mojzis