2013-03-04 5 views
1

Drupal 전문가의 도움이 필요합니다.Drupal, Ubercart - 체크 아웃 양식에 사용자 정의 필드 추가

내 목적 (Drupal 7 및 Ubercart 3 사용)은 체크 아웃 페이지에 동적 인 (아약스 요청의 값) 사용자 정의 필드를 추가하는 것입니다.이 필드는 사용자의 배달 도시 입력에 따라 다릅니다.

"추가 필드 창"모듈을 사용하여 일부 자리 표시 자 값이있는 필드를 만들었습니다. JS 메서드를 사용하여 해당 필드에 값을 추가합니다. 해당 동적 추가 선택된 값이있는 양식을 제출할 때 문제가 발생했습니다. 해당 필드에 "잘못된 선택"오류가 있습니다. js가 아닌 값 (자리 표시 자)을 선택하지 않으면 모든 것이 예상대로 작동합니다.

그 문제에 대한 해결책을 알려주세요.

여기서 하나를 발견했습니다. https://stackoverflow.com/a/5159013/837255이 일반적인 접근 방법 인 것으로 보이지만 다른 문제가 시작됩니다. % my module %에서 조작 할 수있는 필드에 액세스 할 수 없습니다.

내가 모듈 'ajax_field_name'에 의해 만들어진으로 변경해야하는 방법

예 :

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

하지만 내 * 요리하는 창없이 어떤 $ 양식 [ '창이']가 [ '배달'] [ 'ajax_field_name ']. 내가 할 때 var_dump($form['panes']['delivery']) 내가 그 'ajax_field_name'어딘가에 $form['panes']['delivery']['address']['#uc_addresses_address'] OBJECT 개인 재산 뒤에 위치하고 참조하십시오.

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

은 그 형태로하지만, 그것에 접근하는 올바른 위치에 사용자 정의 필드를 만들고이 필드에 영향을주지 않습니다 -

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']에서이 필드 ('ajax_field_name2')는 모듈 'ajax_field_name'을 사용하여 작성된 것과 별도로 위치합니다.

나는이 행동의 이유가 몇 가지 모듈이라고 생각합니다. uc_addresses (맞습니까?),하지만 내가 가장 의심스러워 할 때도 문제가 여전히 있습니다.

'ajax_field_name'만든 필드에 액세스하는 방법을 찾을 수 있습니까? 감사합니다.

답변

1

이것은 완전히 문제를 해결하지 못할 수도 있지만 (여전히 오래된 질문 인 것처럼 ...), 한 가지 문제는 틀린 고리를 사용하고 있다는 것입니다. 이를 수행하려면 hook_uc_checkout_pane_alteruc_checkout_pane_delivery을 사용해야합니다. 나는 이것이 미국 이외의 다른 것으로 선택된 기본 국가를 설정하는 것을 어렵게한다는 것을 배웠다. hook_form_alter을 통해 조작하면 문제가 심각하게 중단됩니다.

저는 지금 비슷한 작업을하고 있습니다. 나는이 정보를 밝힐 때이 정보를 업데이트 할 것이다.