2013-03-04 33 views
1

需要Drupal專家的幫助。Drupal,Ubercart - 添加自定義字段以結帳形式

我的目的(手中有Drupal 7和Ubercart 3)是爲Checkout頁面添加一個自定義字段,該字段應該是動態的(來自ajax請求的值),其內容取決於用戶的交付城市輸入。

使用「Extra Fields Pane」模塊,我已經成功創建了帶有某個佔位符值的字段。比,我使用JS方法將值附加到該字段。當我使用該動態添加的選定值提交表單時出現問題 - 我爲該字段提供了「無效選擇」錯誤。當選擇未添加js值(佔位符)時 - 一切按預期工作。

請問我可以提示我解決這個問題嗎?

我在這裏找到一個https://stackoverflow.com/a/5159013/837255,它似乎是一種常見的方法,但這裏其他問題開始了。 在%我的模塊%在一個鉤子我不能訪問字段做操作。

的我是如何通過模塊「ajax_field_name」創建做出改變

例子:

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

但我他媽的窗格中沒有任何$形式[「窗格」] [「交貨」] ['ajax_field_name 「]。當我做var_dump($form['panes']['delivery'])時,我發現位於$form['panes']['delivery']['address']['#uc_addresses_address']對象後面的'ajax_field_name'位於私有財產後面。

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'創建的字段? 謝謝。

回答

1

這可能不能完全解決您的問題(如果您仍然有這個問題,這似乎是一個相當古老的問題......),但一個問題是您使用的是錯誤的鉤子。您應該使用hook_uc_checkout_pane_alter和目標uc_checkout_pane_delivery來完成此操作。我試圖將選定的默認國家設置爲除美國之外的其他國家,我學到了這一點。如果你通過hook_form_alter以及它的變體來操縱它們,事情會很糟糕。

我現在正在通過類似的工作。當我發現它時,我會用更多信息更新這個答案。

相關問題