0

私はdrupal7モジュールに取り組んでおり、ajaxフィルターを使用してページ(MENU_LOCAL_TASKノード/%ノード/何か)に情報を出力したいと考えています。フォームを作成し、2つのチェックボックスを追加しました。1つはデフォルトで、もう1つはそうではありません。チェックボックスがオンになっている場合の情報をユーザーに表示したい。1はテーブル行1に表示され、2はテーブル行2に表示されます。一部がオフの場合、そのテーブル行がオフになります。送信してリロードせずに、ajaxだけで解決したいと言いました。次の2つのチェックボックスに追加しました'ajax' => array('callback' => 'my_module_callback') 。これがコードの残りの部分で、単純化されています。

function my_module_callback($form, $form_state) {
    $data = array();
    $nid = 1;
    if ($form_state['values']['checkbox1']) { 
        $data += load_data($nid, "checkbox1");
    }
    if ($form_state['values']['checkbox1']) { 
        $data += load_data($nid, "checkbox2");
    }
    $commands[] = ajax_command_html("#here", my_module_table($data));
    return array('#type' => 'ajax', '#commands' => $commands);
}


function my_module_table($data){
    //do some stuff with the data in a foreach
    return theme("my_module_fancy_table",array("data" => $data));
}

function theme_my_module_fancy_table($data){ //registered with my_module_theme()
    // putting html into $output in a foreach
    return $output;
}

function my_module_page_callback_from_menu_function($nid){
    $output = drupal_render(drupal_get_form('my_module_custom_ajax_form'));
    $output .= "adding other stuffs including div#here";
    return $output;
}

まず第一に、これはこれを行うための「良い方法」であり、私は一種の自信を失いました:) 2番目の質問、ページの読み込み時にデータを表示する方法、厳密に1つのチェックボックスを変更していくつかの情報を表示する必要があります。

簡単な説明をありがとうと申し訳ありません:)

4

1 に答える 1

1

コールバックで実際に処理を行うのではなく、フォーム作成関数で行う必要があります。コールバックは通常、変更されたフォームの部分のみを返します。また、この場合、コマンド[]を設定する必要はないと思います。フォームの一部を返すと、設定されたコンテンツが「ラッパー」に自動的に置き換えられるためです。

function my_module_form($form, $form_state){
  $data = array();
  $nid = 1;
  if ($form_state['values']['checkbox1']) { 
    $data += load_data($nid, "checkbox1");
  }
  if ($form_state['values']['checkbox2']) { 
    $data += load_data($nid, "checkbox2");
  }

  $form = array();
  $form['checkbox1'] = array(
    '#type' => 'checkbox',
    '#ajax' => array(
      'callback' => 'my_module_callback'
      'wrapper' => 'mydata',
      'event' => 'change',
    ),
  );
  $form['checkbox2'] = array(
    '#type' => 'checkbox',
    '#ajax' => array(
      'callback' => 'my_module_callback'
      'wrapper' => 'mydata',
      'event' => 'change',
    ),
  );
  $form['mydata'] = array(
    '#prefix' => '<div id="mydata">',
    '#suffix' => '</div>',
    '#markup' => my_module_table($data),
  );
  return $form;
}

function my_module_callback($form, $form_state){
  // $form_state['rebuild'] = true; may have to be set because the form has not been submitted and wont be rebuilt...I think, I cant remember for sure.
  return $form['mydata'];
}

ページ読み込み時にデータを表示するには、フォームビルド関数でデータを設定するロジックを変更するだけです。また、fyi、drupal専用のスタックサイトがあります:http://drupal.stackexchange.com

于 2013-02-23T13:44:52.883 に答える