2017-09-23 12 views
0

私は答えをWhich Submit Button was Clicked in CakePHP?と見ました。そのような状況は私には当てはまりません。なぜなら私は各ボタンに対して同じ行動をとるからです。cakephp 3.xで選択されたボタンを特定する方法は?

私はブートストラップモーダルを再利用したいのですが、モーダルが呼び出されたときに選択されたアイテムを知りたいと思います。非常に単純に、私は各学校オブジェクトの成績表を持っています。ユーザーが[追加]ボタンをクリックすると、モーダルを呼び出してそのオブジェクトの等級を追加します。すべてのオブジェクトにモーダルを再利用したいので、どのオブジェクトが選択されたのかを知りたい。 cakephp 3.xでどうすればいいですか?

教師がグレードを追加して+ボタンを押した後、グレードセービングに同じモーダルを使用すると、彼が数学または英語を選択したかどうかをどのように知ることができますか? add grade

+0

をあなたの質問はまだ明らかではありません私にはいくつかのスクリーンショットを投稿できますか? –

答えて

1

okey、最も単純な方法は、非表示フィールドを持つモーダルです。これにはサブジェクトが含まれています。私はこれがcakephpとあまり関係ないと思う。ボタンが押されたかを決定する唯一の方法はJavascriptを使用することです

function modalopen(subject) { 
 
    $('#modal #subject').val(subject); 
 
    $('#modal').modal('toggle'); 
 
    }
<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    <meta charset="utf-8"> 
 
    <title></title> 
 
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script> 
 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous"> 
 
    </head> 
 
    <body> 
 
    <button type="button" class="btn btn-info" onclick="modalopen('english')">+</button> 
 
<button type="button" class="btn btn-info" onclick="modalopen('math')">+</button> 
 

 
<div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="" aria-hidden="true"> 
 
    <div class="modal-dialog"> 
 
    <div class="modal-content"> 
 
     <div class="modal-header"> 
 
     <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> 
 
     <h4 class="modal-title" id=""></h4> 
 
     </div> 
 
     <div class="modal-body"> 
 
     sub (will be hidden):<br> 
 
     <input type="text" name="subject" id ="subject" value="" placeholder="will be hidden"><br> 
 
     Mark:<br> 
 
     <input type="text" name="mark" id ="mark" value="" placeholder="mark"> 
 
     </div> 
 
     <div class="modal-footer"> 
 
     <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
 
     <button type="button" class="btn btn-primary">Save</button> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div> 
 
    </body> 
 
</html>

+0

あなたのモーダルハウスがCakeフォームであると仮定すると、私はCakeに隠しフォームフィールドを追加します: –

1

: 例は次のようになります。これはつまり、モーダルを起動するには、ボタンの上のhtmlタグ・オプションベースの方法を使用してないを意味します

<!-- Button trigger modal: CAN *NOT* USE THIS TECHNIQUE!! --> 
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal"> 
    Launch demo modal 
</button> 

を私はあなたのモーダル内のフォームはケーキが生成した形で、submitボタンがあると仮定しますページの再描画をトリガする通常のフォーム送信は、モーダルを効果的に終了させます(IEには「モーダル削除」はありません)。

ケーキのパラダイムに可能な限り近づけておくために、私はそれを隠しフォームフィールドでサーバーに送り返します。

ような何か:あなたのCTPでケーキの側の

フォームを作成中:これは

<input type="hidden" name="subject_id" id="subject-id-field"/> 

のようなフォームで何かを生成します

// HTML WRAPPER FOR MODAL 

<?= $this->Form->create(yourentity); ?> 
(your form stuff) 
<?= $this->Form->hidden("subject_id",["id"=>"subject-id-field"]); 
(end of form stuff including submit) 
<?= $this->Form->end(); ?> 

// HTML WRAPPER FOR MODAL 

我々がする必要がありますJavascriptでこの隠しフィールドをつかんでください。#id-syntaxですべてを参照する方が好きなので、名前(フォーム固有)とID(グローバル)の両方を与えていますが、フォーム[name = subject_id]とあなたのボタンを作成し、HTMLでブラウザ側でID句

を取り除く:

<button type="button" class="btn btn-primary" onclick="launch_dialog('MATH')">Add Math</button> 

ブラウザ側でJavaScriptで、ボタンがクリックされたときに呼び出される関数、これは、フォーム内の被写体IDを設定し、モーダル/フォーム起動:機能にサーバー側で

<script> 
function launch_dialog(subject) { 
    $("#subject-id-field").val(subject); // use the id of the hidden field 
    $("#your-modal").modal("show"); // or whatever you do to launch the modal 
} 
</script> 

をそのフォームターゲット:

 # in your controller php file 
    function formAction() { 
     if($this->request->data["subject_id"]=="MATH") { // use the name of the hidden field 
      // do math record 
     } 
     // etc 

    } 

別のメモ - グレードレコードに実際にsubjectToレコードのsubject_idフィールドがある場合、ボタンのonclick関数でlaunch_dialog関数をその定数で呼び出すと、サーバー内にIF関数は必要ありませんアクションコード。ただ、例えば、IDを生成するために元のレコードを使用してください:コントローラで

を前にレンダリング:CTPファイルで

$this->set("subjects",$this->[entity]->Subjects->find("list"); 

を、のようなもの:

<?php foreach($subjects as $id=>$name): ?> 
<button type="button" class="btn btn-primary" 
    onclick="launch_dialog(<?= $id ?>)">Add <?= $name ?></button> 
<?php endforeach; ?> 
関連する問題