0

ノード ページで切り替える必要がある 2 つの異なるビューがあります。これら 2 つのビューをまとめることはできないため、作成したフォームの値を基本的に受け取り、ビューに引数として送信してビューを表示するフォームを作成しました。私はこのajaxでやろうとしています。正常に動作しますが、問題は、フォームを 2 回目に実行したときに、そのビューが更新または更新されないことです。

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

    }
4

1 に答える 1

0

問題は、HTML 要素を削除していたため、2 番目の呼び出しに置き換える HTML がなかったことです。ajax update を使用するか、コールバックで戻り値を 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);

}
于 2012-11-16T17:13:50.583 に答える