Drupal Ajax Form Ajax Form 拉取两种不同的视图

Posted

技术标签:

【中文标题】Drupal Ajax Form Ajax Form 拉取两种不同的视图【英文标题】:Drupal Ajax Form Ajax Form to pull two different views 【发布时间】:2012-11-16 16:26:32 【问题描述】:

我有两个不同的视图需要在节点页面上切换。我无法将这两个视图放在一起,所以我创建了一个表单,它基本上将采用我创建的表单的值,并将它们作为参数发送到视图并显示视图。我正在尝试使用这个 ajax。它工作正常,但问题是我第二次运行表单时它不会刷新或更新该视图。

    function photoflight_albums() 
        photoflight_gallery_themes();
      $output = render(drupal_get_form('photoflight_gallery_form'));
      $output .= "<div id='gallery-ajax-wrapper'>";
      $output .= views_embed_view('gallery', 'default');
      $output .= "</div>";

      return $output;

    

    //Grabs the node titles
    function photoflight_gallery_themes()
        $type = "photo_theme"; 
        $theme_list = array();
        $nodes = node_load_multiple(array(), array('type' => $type)); 
        foreach($nodes as $themes)
            $theme_list[$themes->title] = $themes->title;
        
        return $theme_list;
    

//Form calls back to the function above to the gallery-ajax-wrapper div output above
    function photoflight_gallery_form($form, &$form_state)
        $form = array();

      $form['themes'] = array(
        '#type' => 'select',
        '#options' => array(photoflight_gallery_themes()),
        '#ajax' => array(
                'callback' => 'photoflight_simplest_callback',
                'wrapper' => 'gallery-ajax-wrapper',
            ),
      );
      //debug($form);
      return $form;
    


    //Ajax callback
    function photoflight_simplest_callback($form, $form_state) 
        $view = views_get_view('gallery');
        $args = array( 'title' => $form_state['values']['themes']);
        $view->set_exposed_input($args);
        $output = $view->preview('default', $args);
        return array("#markup" => $output);

    

【问题讨论】:

【参考方案1】:

问题在于它正在删除 html 元素,因此第二次调用没有要替换的 HTML。更改为使用 ajax 更新或在回调中再次将返回包装在 div 中

function photoflight_simplest_callback($form, $form_state) 
    $view = views_get_view('gallery');
    $args = array( 'title' => $form_state['values']['themes']);
    $view->set_exposed_input($args);
    $output = '<div id="gallery-ajax-wrapper">';
    $output .= $view->preview('default', $args);
    $output .= '</div>';
    return array("#markup" => $output);


【讨论】:

以上是关于Drupal Ajax Form Ajax Form 拉取两种不同的视图的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 8表单提交Ajax表单后的回调

在Drupal7表单中使用#ajax更新多个字段

防止Ajax触发jQuery脚本

Rails 500 服务器错误,对 form_for 部分的 Ajax 请求

无法绑定 ajax:success 到使用 form_for 创建的表单 .... :remote => true

for循环提交ajax,为啥只有第一次能够提交,后面的循环都没有提交到后台,但是for执行完了?急急急!