カスタム エンティティを作成し、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(...)」を通じて実行されます)?
このような問題に直面したことはありませんか?
前もって感謝します。
タンデム。