0

私は drupal 7 と Entity API を使用してモジュールを開発しています。クライアント情報を記録するエンティティがあります。image_field を使用して、クライアントがロゴをアップロードできるようにしたいと考えています。だから私はこの機能を持っています:

    function silver_client_enable()
{
  field_cache_clear();
  field_associate_fields("silver_client");

  if(field_info_field('logo'))
    return;

  $field = array(
    'field_name' => 'logo',
    'cadinality' => 1,
    'type' => 'image',
    );

    field_create_field($field);

  $instance = array(
    'field_name' => 'logo',
    'entity_type' => 'silver_client',
    'bundle' => 'silver_client',
    'label' => 'Logo',
    'description' => 'Logo',
    'display' => array(
      'default' => array('label' => 'hidden')
    ),
    'settings' => array(
      'file_directory' => '/logo',
    ),
    'widget' => array(
      'type' => 'image_image',
     ),
  );

  field_create_instance($instance);
}

エンティティの作成/編集フォームでは、次を使用します。

field_attach_form('silver_client', $client, $form, $form_state);

フィールドをアタッチします。

このフォームを呼び出したところ、画像アップロード欄が正しく表示されていました。私はそれを使用して、提供するファイルをアップロードできます。

フォーム送信機能では、エンティティを次のように保存します。

entity_save('silver_client', $client);

ただし、保存ボタンを押すと、エンティティ テーブルは正しく保存されます。フィールド テーブルではありません。field_data_logo と field_revision_logo の両方が空です。

エンティティ API は、添付フィールドの取得と保存を管理していると思います。誰かが私のコードの何が問題なのか教えてもらえますか? ありがとうございました。

4

1 に答える 1

0

値をエンティティに書き戻す必要があります。

field_attach_submit('silver_client', $client, $form, $form_state);
entity_save('silver_client', $client);

http://api.drupal.org/api/drupal/modules!field!field.attach.inc/function/field_attach_submit/7

そして、フィールド値を検証する必要があります:

field_attach_validate('silver_client', $client, $form, $form_state);

http://api.drupal.org/api/drupal/modules!field!field.attach.inc/function/field_attach_validate/7

さらに、エンティティとフィールドを自分で宣言したくない場合は、 http EntityConstructionKit: //drupal.org/project/eckFeaturesをチェックアウトして、同様にエンティティ構造をエクスポートできますViews

于 2013-01-24T09:16:57.803 に答える