2010-07-17 2 views
1

사이드 바에있는 블록에 AJAX 제출 양식 (AHAH)을 표시하려고합니다. 테스트 목적으로, 나는 Pro Drupal Development book에서 "Poof"라는 예제 모듈을 사용하고있다 : http://books.google.com/books?id=VmZrdGuBZCMC&lpg=PA269&ots=cnHiYG6kXn&dq=pro%20drupal%20development%20poof&pg=PA269#v=onepage&q=pro%20drupal%20development%20poof&f=falseDrupal AHAH 양식이 블록 내에서 작동하지 않는 이유는 무엇입니까?

지금까지 예제에 추가 한 유일한 것은 hook_block의 구현이다.

function poof_block($op = 'list', $delta = 0, $edit = array()) { 
    switch ($op) { 
    case 'list': 
     $blocks[0]['info'] = t('poof'); 
     return $blocks; 
    case 'view': 
     $block['content'] = drupal_get_form('poof_form'); 
     return $block; 
    } 
} 

아약스 모듈은 자신의 페이지 (mydrupalsite.com/poof)에 표시 할 때 잘 작동하지만 템플릿 파일 ('휙', '블록'...) module_invoke와 형태를 호출 할 때, 양식이 정상적으로 제출되고 (AJAX를 삭제하십시오) 페이지를 새로 고칩니다.

AHAH가 블록 내에서 작동하지 않는다는 것을 암시하는 내용의 접미어가 발견되었지만 이것이 어떻게되는지에 대한 확실한 답을 찾을 수 없습니다. 그렇다면 왜? 또는 더 나은 방법은 무엇입니까? 나는 자신의 빈 페이지에 넣고 iframe과 함께 가져와야합니까? 그건 불필요하게 지저분한 소리가 난다.

업데이트]

: 다음은 참조를 위해 더 많은 코드 (다시는 프로 드루팔 책의)

function poof_form() { 
    $form['target'] = array(
    '#type' => 'markup', 
    '#prefix' => '<div id="target">', 
    '#value' => t('Click the button below.'), 
    '#suffix' => '</div>', 
); 
    $form['submit'] = array(
    '#type' => 'button', 
    '#value' => t('Click Me'), 
    '#submit'=>false, 

    '#ahah' => array(
     'event' => 'click', 
     'path' => 'poof/message_js', 
     'wrapper' => 'target', 
     'effect' => 'fade', 
    ), 
); 

    return $form; 
} 

function poof_message_js() { 
    $output = t('POOF!'); 
    drupal_json(array('status' => TRUE, 'data' => $output)); 
} 
+0

블록 내에서 AJAX 모듈 사용 가능 형식을 사용하며 잘 작동합니다. 따라서 AJAX 모듈의 'attach to form'감지 논리에 문제가있을 수 있습니다. 양식에 부착 할 AJAX 모듈을 어떻게 구성합니까? –

+0

답장을 보내 주셔서 감사합니다, Henrik. 여기 AJAX 모듈을 직접 사용하지 않습니다. 나는 폼에서 Drupal의 "AHAH"기능을 사용하고 있습니다. 선명하게하기 위해 원본 게시물에 다른 스 니펫을 추가하고 있습니다. 아마도 대답은 jQuery로 Ajax를 직접 작성해야한다는 것입니다. AHAH 메서드가 페이지 컨텍스트에서 작동하는 것처럼 보이기 때문에, 나는 블록을 사용하여 동일한 코드를 사용하려고합니다. – fredrover

+1

misc/ahah.js가 블록에 양식을 가져올 때 포함됩니까? –

답변

1

시도하여 hook_block 구현에

$blocks[0]['cache'] = BLOCK_NO_CACHE;

를 추가를합니다.

ahah를 사용하여 양식을 렌더링하면 drupal_add_js를 호출하면 ahah javascript가 추가되지만 해당 블록의 출력은 캐시되지만 페이지에 추가되는 javascript는 캐시되지 않습니다.