2012-11-26 3 views
2

두 개의 선택 상자가있는 사용자 정의 블록을 프로그래밍 방식으로 작성하고 있습니다. 첫 번째 값은 자동으로 채워지고 두 번째 값은 첫 번째 값에 따라 채워집니다. 이상적으로 AJAX를 사용하고 싶습니다. AJAX를 표준 형식으로 통합 한 경험이 있지만 블록 구성 양식에는 $ form_state 변수가 없으며 다르게 작동하는 것 같습니다. 표준 방법을 사용할 수 있습니까?Drupal 7 Block AJAX를 구성하십시오.

'#ajax'    => array(
    'callback'   => 'my_callback', 
    'wrapper'   => 'the-id', 
    'method'   => 'replace', 
    'effect'   => 'fade', 
), 

콜백은 어떻게 작동합니까?

감사합니다, 호위

+0

정말 슬픈 답변입니다. 혹시 그것을 작동 시키거나 대답을 찾았습니까? 내가 똑같은 일을하고 있기 때문에 후속 링크가 굉장 할 것입니다. –

+0

추가 된 내용 :-) – Chris

답변

0

나는 이것을 시도하지 않았다 그러나 나는 그것이 작동 내기 : 당신의 블록 구성을 엽니 다) (hook_form_alter 사용합니다. 거기에서 & $ form_state를 가지게되고 멋진 AJAX 물건 (see this)을 할 수 있습니다. 어려운 부분은 변경 후크에서만 양식을 변경하는 것입니다. 가능한 방법이 작동하는지

확실하지 않음 (가장 우아한 방법) :

function mymodule_form_alter(&$form,&$form_state,$form_id) { 
     if ($form_id == 'block_admin_configure') { 
     // Find the delta in the $form variable 
     if ($form['delta'] == 'the_delta_you_are_looking_for') { 
     //do fancy ajax stuff 
     } 
     } 
    } 

미운하지만 확실히 가능 :

function mymodule_form_alter(&$form,&$form_state,$form_id) { 
    if ($form_id == 'block_admin_configure' && arg(4) == 'mymodule') { 
     //do fancy ajax stuff 
    } 
    } 
} 

심지어 이보다뿐만 아니라 가능 :

function mymodule_block_configure($delta = '') {  
    $form = array(); 
    if ($delta == 'my_block') { 
     $form["my_block_change_this"] = array(
      "#type" => "hidden", 
      "#value" => "lalala", 
     ) 
    } 
} 

function mymodule_form_alter(&$form,&$form_state,$form_id) { 
    if ($form_id == 'block_admin_configure') { 
     if (!empty($form['my_block_change_this'])) { 
      //do fancy ajax stuff 
     } 
    } 
} 

팁 : form_state-array (변경 후크에서)를 출력하고 거기에 무엇이 있는지 확인하십시오. n FAPI-Issues를 실행합니다.) 희망이 도움이됩니다.