You are here

请问有第三方模块在自定义表单时,直接使用过fieldfield和imagefield类型的表单字段吗?我想看下怎么调用的具体

流云 的头像
Submitted by 流云 on 星期四, 2013-03-28 05:58

请问有第三方模块在自定义表单时,直接使用过fieldfield和imagefield类型的表单字段吗?我想看下怎么调用的具体

论坛:

Drupal版本:

g089h515r806 的头像

这个是不行的,fieldfield和imagefield类型的表单字段,只显示在实体的表单页面。

除非这样,你的表单里面包含对应的实体表单,这样可以把fieldfield和imagefield类型放进自己的表单中。

g089h515r806 的头像

我曾经这样用过,供参考:

function userreg_school_register_form($form, &$form_state){
  $form = array();
  global $user;
  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('用户名'),
    '#required' => TRUE,
    '#weight' => 96,
  );
  $form['mail'] = array(
    '#type' => 'textfield',
    '#title' => t('电子邮箱'),
    '#required' => TRUE,
    '#weight' => 97,
  );
  $form['pass'] = array(
    '#type' => 'password_confirm',
    //'#title' => t('密码'),
    '#required' => TRUE,
    '#weight' => 98,
  );
  $form['title'] = array(
    '#type' => 'textfield',
    '#title' => t('机构/学院学校名'),
    '#required' => TRUE,
    '#attributes' => array('class' => array('company_name')),
  );
  $node = (object) array(
    'uid' => $user->uid,
    'name' => (isset($user->name) ? $user->name : ''),
    'type' => 'jigou',
    'language' => LANGUAGE_NONE
  );

  //$form = drupal_get_form('node_form',$node);
  field_attach_form('node', $node, $form, $form_state);

  $form['actions'] = array('#type' => 'actions');
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('注册'),
  );
  $form['#validate'][] = 'userreg_school_register_form_validate_handler';
  $form['#submit'][] = 'userreg_school_register_form_submit_handler';
 
  return $form;
}

这里面,通过field_attach_form('node', $node, $form, $form_state);,将节点上面的字段追加了进来。

不过对于这些字段,提交的时候,还需要

 field_attach_submit('node', $pseudo_entity, $form, $form_state);

总之,不是不可以,是比较麻烦,只有熟悉了字段、实体背后的机制,才能这样调用。

流云 的头像

额,有时候需求比较随意,有个自定义表单甚至没有用drupal的方式定义的小表单需要一个文件上传效果。

不过查看了下file模块里的相关代码,终于是把filefield效果弄出来了:

function ***_form() {
  $form['test_file'] = array(
    '#type' => 'managed_file', 
    '#title' => t('test file'), 
    '#upload_location' => file_default_scheme() . '://', 
    '#default_value' => variable_get('test_file', ''),
    '#upload_validators' => array('file_validate_extensions' => array('gif png jpg'))
  );
}
但是imagefield还是不知道怎么弄。