drupal 字段小部件不保存提交的数据 [英] drupal field widget not saving submitted data

查看:15
本文介绍了drupal 字段小部件不保存提交的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个自定义小部件,但是当我提交时,Drupal 似乎没有保存任何数据.当使用 hook_field_attach_submit() 显示我粘贴的数据时,它被列为空.

I'm trying to create a custom widget but when I submit, Drupal doesn't seem to save any data. When using hook_field_attach_submit() to display what data I've pasted, it is listed as null.

奇怪的是,如果我将 #type 更改为单个文本字段而不是字段集,它将仅保存已输入字符串的第一个字符.

Strangely, if i change the #type to be a single textfield instead of a fieldset it will save only the first character of the string that has been entered.

这似乎是一个验证问题,但我不知道如何挂钩或调试问题.我可以从这里去哪里?

This seems like a validation issue, but I'm not sure how to hook into it or to debug the problem. Where can I go from here?

<?php
function guide_field_widget_info(){
  dpm("guide_field_widget_info");
  return array(
    'guide_text_textfield' => array(
      'label' => t('test Text field'), 
      'field types' => array('text'), 
      'settings' => array('size' => 60), 
      'behaviors' => array(
        'multiple values' => FIELD_BEHAVIOR_CUSTOM,
        'default value' => FIELD_BEHAVIOR_DEFAULT,
      ),
    )
  );
}


function guide_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
  $field_name = $instance['field_name'];
  $required = $element['#required'];
  $item =& $items[$delta];


  $element += array(
        '#type' => 'fieldset',
    '#title' => t('helloooooooo'),
    );
    $required = $element['#required'];
    $item =& $items[$delta];

    $element['nametest'] = array(
        '#title' => t('Name'),
        '#type' => 'textfield',
        '#required' => $required,
        // use #default_value to prepopulate the element
        // with the current saved value
        '#default_value' => isset($item['nametest']) ? $item['nametest'] : '',
    );

    $element['checkme'] = array(
        '#title' => t('Check this box or dont'),
        '#type' => 'checkbox',
        '#default_value' => isset($item['checkme']) ? $item['checkme'] : '',
    );

//When changing the above code to have a single field, $value is no longer  null but will display the first character of the string. I've pasted the code I used to test beloe
/*
  $element+= array(
    '#title' => t('Name'),
    '#type' => 'textfield',
    '#default_value' => isset($item['nametest']) ? $item['nametest'] : '',
  );  
*/

  return $element;
}


//hooking this here is required given that after submit, the value is a multidimensional array, whereas the expected value of text is, well, text :-)

function  guide_field_attach_submit($entity_type, $entity, $form, &$form_state){
  dpm($form,"guide_field_attach_submit data"); //shows $form[field_test_field][und][0]    [value] as being null 
}

推荐答案

hook_field_is_empty 是强制性的,必须像下面这样实现:

hook_field_is_empty is mandatory and has to be implement like following:

 /**
  * Implements hook_field_is_empty().
  */

function MODULENAME_field_is_empty($item, $field) {
  if ($field['type'] == 'FIELDTYPE') {
    if (empty($item[$field['type']]['YourField']) ) {
      return (TRUE);
    }
  }
  return (FALSE);
}

这篇关于drupal 字段小部件不保存提交的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆