0

カスタム エンティティを作成し、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 の機能なのかバグなのか教えてもらえますか? 値をどこに置くかをいつ決定するのか理解できません(すべてのプロセスは「field_attach_form(...)」を通じて実行されます)?

このような問題に直面したことはありませんか?

前もって感謝します。

タンデム。

4

1 に答える 1

1

フィールドに値が入力されておらず、デフォルト値が定義されていないため、検証で省略形のフォーム フィールドが表示されていると思います。値がないため、値を格納する配列はありません。

于 2012-12-29T07:25:45.547 に答える