2

Drupal の専門家の助けが必要です。

私の目的 (Drupal 7 と Ubercart 3 を手に) は、チェックアウト ページにカスタム フィールドを追加することです。これは動的 (ajax 要求からの値) であり、コンテンツはユーザーの配達都市の入力に依存します。

「Extra Fields Pane」モジュールを使用して、プレースホルダー値を持つフィールドを正常に作成しました。それよりも、JS メソッドを使用してそのフィールドに値を追加します。動的に追加された選択値を含むフォームを送信すると、問題が発生しました。そのフィールドに「無効な選択」エラーがあります。js によって追加されていない値 (プレースホルダー) が選択されている場合、すべてが期待どおりに機能します。

その問題の解決策を教えてください。

ここで見つけましたhttps://stackoverflow.com/a/5159013/837255これは一般的なアプローチのようですが、ここで他の問題が始まります。フックの %my module% で、フィールドにアクセスして操作を行うことができません。

モジュール「ajax_field_name」によって作成されたものを変更する必要がある方法の例:

$form['panes']['delivery']['ajax_field_name']['#ajax'] = ....

しかし、私の *cking ペインには $form['panes']['delivery']['ajax_field_name'] がありません。するとvar_dump($form['panes']['delivery'])、「ajax_field_name」$form['panes']['delivery']['address']['#uc_addresses_address']がプライベート プロパティの背後にある OBJECT のどこかにあることがわかります。

function uc_nova_poshta_form_alter(&$form, &$form_state, $form_id){
    if ($form_id == 'uc_cart_checkout_form'){
        $obj = $form['panes']['delivery']['address']['#uc_addresses_address'];
        // addressBook is a private property
        $obj->addressBook;
    }
}

実際、このコードは私が必要とすることを行います-

$form['panes']['delivery']['address']['ajax_field_name2'] = array(
  '#type' => 'select',
  ...
}

カスタムフィールドを適切な場所に作成し、それにアクセスできますが、そのフォームのみであり、このフィールドはそれ以降のアクティビティ (注文レビュー、管理ページなど) には影響しません。また、$form['panes']['delivery']このフィールド (「ajax_field_name2」) は、モジュール「ajax_field_name」で作成されたものとは別に配置されています。

この動作の理由は、uc_addresses などのいくつかのモジュールにあると思いますが (そうですか?)、最も疑わしいモジュールを無効にしても、問題は解決しません。

「ajax_field_name」で作成されたフィールドにアクセスする方法を見つける可能性はありますか? ありがとうございました。

4

1 に答える 1