0

マスター add.ctp に has-many リレーションシップの 2 つのテーブルがあり、ユーザーが 0 ~ 5 個のファイルをアップロードできるようにします (ファイル パス情報は詳細テーブルに保存されます)。

master/add.ctp に添付(詳細)フォームを動的に表示したい

1、ユーザーはドロップダウン リストからアップロードするファイルの数を選択します。

echo $this->Form->input('attachments', array( 'options' => array(1, 2, 3, 4, 5),'empty' => '(choose one)', 'onchange' => 'showNumber(this.value)'));

次に forloop

{
        echo $this->Form->input('attachment_path', array('type'=>'file','label' =>'Attachment, Maximum size: 10M'));    
} 

//しかし、this.value をキャプチャする方法がわかりません。Javascript が値を php に渡すことができないことはわかっています。

またはユーザーが「別の添付ファイルを追加」リンクをクリックすると、詳細フォームが表示されます。

この機能を実現する方法については、ご協力いただければ幸いです。

この記事を読みました: AJAX を使用して Javascript 変数を PHP に割り当てると、同じエラーが発生します: 変数が未定義です

編集: http://cakephp.1045679.n5.nabble.com/Adding-fields-to-a-form-dynamically-a-complex-case-td3386365.html

「各フィールドには、最後に [] を含むデフォルト名を使用します (配列のようにスタックします)。例: フィールドが送信された後の data[][book_id]」

[] はどこに配置すればよいですか?

4

2 に答える 2

0

このアプローチを使用して、この機能を実現します。(やっと手に入れました:))

http://ask.cakephp.org/questions/view/foreach_loop_with_save_only_ Saving_last_member_of_array

はい、AJAX は多くのことを行うことができます。私には、ロジックを 1 日で理解するのは非常に困難です..

とにかく、ありがとう。

于 2012-09-25T04:33:44.310 に答える
0

これにはAjaxを使用する必要があると思います。

ajax 呼び出しを作成してselect.change()から、必要な情報を返すコントローラー内のメソッドを作成するだけです。

コントローラーで直接使用して (またはカスタム ビューでより適切に) データの配列を返し、echo json_encode(array('key' => 'value'))Javascript でアクセスすることができます。

success: function(data) {
     alert(data.key);
}

編集...

あなたのJavaScriptでは、次のようなものを使用してください...

$('select').change(function(e) {
    var select = $(this);
    $.ajax({
        type: "POST",
        dataType: "json",
        url: "/attachments/youraction",
        data: { data: { id: select.find(":selected").val() } },
        success: function(data) {
            for (i in data) {
                var input = $('<input>', {type: "file", label: data[i].Attachment.label})
                $('form.your-form').append(input);
            }
        }
    })
});

次に、「Yourcontroller」で「youraction」メソッドを作成します。

<?php
class AttachmentsController extends AppController
{
    public function youraction()
    {
        if (!$this->RequestHandler->isAjax() || !$this->RequestHandler->isPost() || empty($this->data['id']))
        {
            $this->cakeError('404');
        }

        // Do your logic with $this->data['id'] as the select value...
        $data = $this->Attachment->find('all', array('conditions' => array('id' => $this->data['id'])));
        // ....


        // then output it...
        echo json_encode($data);

        // This should be done creating a view, for example one named "json" where you can have there the above echo json_encode($data);
        // Then..
        // $this->set(compact('data'));
        // $this->render('json');
    }
}

より分かりやすくなりました?? ajax + cakephp について疑問がある場合は、Web で検索してください。多くのチュートリアルが見つかります。

于 2012-09-24T09:46:26.193 に答える