【问题标题】:trouble customizing a page.tpl.php for Drupal 7 page callback to serve a form over AJAX麻烦为 Drupal 7 页面回调自定义 page.tpl.php 以通过 AJAX 提供表单
【发布时间】:2011-10-15 00:17:09
【问题描述】:

我正在创建一个自定义模块。我想实现一个可以用作块的表单,并在查询对话框中使用(加载了 ajax 请求)。我已经创建了块没问题。我也创建了页面回调函数没问题。

所以,我可以在一个块中加载表单,然后我可以打开 jquery 对话框,它会通过 ajax 请求获取表单。但是,它会加载表单和完整的页面模板以及页眉和页脚等......

我想要做的是在获取 ajax 调用时使用不同的页面模板,这样我得到的只是表单。但是,我在网上看到的一切似乎都是 drupal 6 和 7 之间的混合体,我还没有得到任何工作。

这是我最近的尝试:

在菜单挂钩中

  $items['mymodule/get_form_ajax'] = array( 
    'title' => 'Ajax Form',
    'type' => MENU_CALLBACK,
    'page callback' => 'get_form_ajax',
    'access arguments' => array('access content'),
  );

然后我有回调:

function get_form_ajax() {
    $form = drupal_get_form('request_form');
    $build['items'] = array(
        '#theme' => 'request_form',
        '#items' => $form,
    );
    return $build;
}

然后我以这种方式注册了主题:

function mymodule_theme($existing, $type, $theme, $path){
  return array(
    'request_form' => array(
      'template' => 'request_form', 
      'render element' => 'form', 
    )
  );
}

无论如何,这完全行不通。它只是在对话框中呈现一个空页面。任何帮助将不胜感激。

【问题讨论】:

    标签: drupal drupal-7 drupal-modules drupal-theming


    【解决方案1】:

    由于您正在进行 AJAX 调用,因此无需让页面正常构建,您可以直接打印呈现的表单并调用 drupal_exit()

    function get_form_ajax() {
      $form = drupal_get_form('request_form');
      echo render($form);
    
      drupal_exit();
    }
    

    这将为您提供一个漂亮干净的表单,该表单继承了正在加载的页面的样式,并且仍然保持表单令牌/缓存完好无损。

    【讨论】:

    • 是的!那很完美。谢谢克莱夫。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多