사이드 바에있는 블록에 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));
}
블록 내에서 AJAX 모듈 사용 가능 형식을 사용하며 잘 작동합니다. 따라서 AJAX 모듈의 'attach to form'감지 논리에 문제가있을 수 있습니다. 양식에 부착 할 AJAX 모듈을 어떻게 구성합니까? –
답장을 보내 주셔서 감사합니다, Henrik. 여기 AJAX 모듈을 직접 사용하지 않습니다. 나는 폼에서 Drupal의 "AHAH"기능을 사용하고 있습니다. 선명하게하기 위해 원본 게시물에 다른 스 니펫을 추가하고 있습니다. 아마도 대답은 jQuery로 Ajax를 직접 작성해야한다는 것입니다. AHAH 메서드가 페이지 컨텍스트에서 작동하는 것처럼 보이기 때문에, 나는 블록을 사용하여 동일한 코드를 사용하려고합니다. – fredrover
misc/ahah.js가 블록에 양식을 가져올 때 포함됩니까? –