代码之家  ›  专栏  ›  技术社区  ›  fredrover

为什么Drupal ahahh表单不能在一个块内工作?

  •  1
  • fredrover  · 技术社区  · 14 年前

    我试图让一个AJAX提交(ahahh)表单在边栏的块中显示。出于测试目的,我使用了Pro Drupal开发书籍中名为“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=false

      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;
      }
    }
    

    AJAX模块在自己的页面上显示时工作正常(mydrupalsite.com/poof)但是,当我在一个模板文件中使用module_noke('poof','block'…)调用表单时,表单将按正常方式(sans AJAX)提交并刷新页面。

    我找不到一个确切的答案来解释为什么会发生这种情况,尽管a发现了一些与此无关的东西,表明也许AHAHH在街区内不起作用。如果是这样,为什么?或者更好的是,有什么办法可以解决。我必须把它放在自己的空白页上,然后用iframe把它带进来吗?听起来不必要。

    更新时间: 这里有更多的代码供参考(同样,它来自prodrupal的书)

    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));
    }
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   zroger    13 年前

    尝试添加

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

    到你的hook_块实现。