2013-01-24 23 views
0

我使用drupal 7和Entity API来开发模块。我有一个实体来记录客户信息。我希望使用image_field让客户端上传他们的标志。所以我有这样的功能:将image_field附加到drupal 7中的实体

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); 

到attch领域。

当我调用此表单时,图像上传字段被纠正显示。我可以使用它来提升文件的服务。

在表单提交功能,我保存实体:

entity_save('silver_client', $client); 

然而,当我按下保存按钮,实体表正确保存。字段表不是。 field_data_logo和field_revision_logo都是空的。

我相信实体API会关注检索和保存附加字段。有人能告诉我我的代码有什么问题吗?谢谢。

回答

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

此外,如果你不想声明你的实体和f您可以自行结算EntityConstructionKithttp://drupal.org/project/eck,它允许导出与一样的实体结构,就像Views一样。

+0

我喜欢自己解决这个问题。在提交功能中,功能: entity_form_submit_build_entity('silver_client',$ client,$ form,$ form_state);需要调用 。没有它,值来自form_state –

+0

谢谢Ghommey。在我的原始代码中,我确实使用了field_attach_submit,但将其放在entity_save之后。我真的不明白这个功能的意图。现在我明白了,它实际上是将来自form_state的字段值放入实体对象中。以便这些值可以稍后保存。 –

+0

我很高兴我可以帮助:) – jantimon

相关问题