web-dev-qa-db-ja.com

Drupal ajaxコールバックを含むフォームをロードするBootstrap modal

Ajaxコールバックを介してコールバック関数にデータを送信する「ブートストラップモーダルダイアログ」にフォームをロードする必要があります。

モーダルダイアログを起動すると、フォームが正しく表示されます。

<a data-toggle='modal' href='?q=document/share' data-target='#Modalshare' class='ModalTrigger'>
 <div class='' style='float:right;'><span class=''><span title='' class='glyphicon glyphicon-share-alt'></span></span></div>
<a/>

メニュー「ドキュメント/共有は、モーダルコンテンツを表示する関数「modal_share()」を呼び出します

<div>...
content
...<div>

この関数modal_share()内で、レンダリングのためにフォームが呼び出されます。

function modal_share($fid) {

$f = drupal_get_form('modal_share_form',$fid);
....
....
echo <div> .... ".drupal_render($f) .".....</div>

}

これまでのところ、モーダルは以下の構造のように「modal_share_form」の形式で正しく出力されます。

function modal_share_form($form,&$form_state,$fid) {
form['share_list'] = array(
  '#type' => 'select',
  '#multiple' => TRUE,
  '#options' => $option ,
  '#title' => t(""),
  '#description' => "",
  '#required' => false,
  '#default_value' => $default

);

$form['share'] = array (
        '#type' => 'button',
        '#value' => "<span class='glyphicon glyphicon-share-alt'></span><span id=''> ".t('record')."</span>",
        '#ajax' => array(
          'callback' => "modal_share_form_submit", 
          'wrapper' => 'shareMessage',
          'effect' => 'fade',
          'method'=>'html'
        ),

        '#id' => 'modalsharebutton',
);
return $form;
}

ここでの問題は、ボタンの#ajax関数がdrupalによって正しくレンダリングされないことです。

hTMLレンダリングは次のとおりです。

<button id="modalsharebutton" class="btn btn-primary form-submit" type="button" value="<span class='glyphicon glyphicon-share-alt'></span><span id=''>record</span>" name="op">

「ajax-processed」クラスが添付されていない

重要なのは、メインページにフォームをロードすると、ajax関数が適切にレンダリングされることです。

だから私の結論は、モーダル用のフォームを構築するとき、それは適切なajax構築プロセスを通過していないということです...

しかし、私は解決策を見ることができません。

手伝ってくれてありがとう。

6
arnaudom

イベントで '#attribute'を追加して、この問題を別の方法で解決しました...

$form['share'] = array(
        '#type' => 'button',
        '#value' => "<span class='glyphicon glyphicon-share-alt'></span><span id=''> " . t('Record') . "</span>",
        '#ajax' => array(
          'callback' => "modal_share_form_submit", 
          'wrapper' => 'shareMessage',
          'effect' => 'fade',
          'method' => 'html'
        ),

        '#id' => 'modalsharebutton',
        '#attributes' => array('onclick' => "share_submit($fid);"),

);

ありがとうございました。

1
arnaudom