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 都是空的。

我相信 Entity 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/eck,它允许导出实体结构,Features就像Views.

于 2013-01-24T09:16:57.803 回答