获取表单数组中CCK字段的随机路径层次结构

时间:2012-12-28 14:29:54

标签: drupal drupal-7 drupal-modules cck

我创建了一个自定义实体,我正在使用CCK字段。每个捆绑包都有自己的字段。例如:

function MYMODULE_install() {
  // Check if our field is not already created.
  if (!field_info_field('field_myField')) {
    $field = array(
        'field_name' => 'date_field',
        'type' => 'list_text',
    );
    field_create_field($field);
}

//Enable is executed only once.
function bundle_callback_enable() {

     // Create the instance on the bundle.
    $instance = array(
        'field_name' => 'date_field',
        'entity_type' => 'payment_method',
        'label' => 'Expiration Date',
        'bundle' => 'card',
        'required' => TRUE,
        'settings' => array();

    field_create_instance($instance);
}

我的捆绑包是从各个模块创建的,因此在每个安装文件中我都会创建相应的字段。

昨天我试图在这些字段中添加验证回调函数,我在表单数组中看到了一些奇怪的东西。 type =“text”的字段具有路径:

$form[field_name]['und'][0][value] //<! expectable

但是type ='list_text'的字段只有路径:

$form[field_name]['und'] //<! unexpectable

我找不到任何解决方案,我用这个解决了它:

function &get_cck_path_value( $field_name, &$form_path) {

  $field = null
  if ( isset( $form_path[$field_name][LANGUAGE_NONE] ) ) {
     $field = &$form_path[$field_name][LANGUAGE_NONE]
  }elseif(isset($form_path[$field_name][LANGUAGE_NONE][0])) {
    $field =  &$form_path[$field_name][LANGUAGE_NONE][0]['value'];
  }
  return $field;
}

我不喜欢这种做法。真是个傻瓜。你能告诉我这是一个cck功能还是bug? 我无法理解何时决定放置值的位置(通过“field_attach_form(...)”完成所有过程)?

你遇到过这样的问题吗?

提前致谢。

Thandem。

1 个答案:

答案 0 :(得分:1)

我相信您在验证中看到缩写的表单字段,因为该字段没有输入任何值,也没有为其定义默认值。没有值,因此不存在用于存储值的数组。