4

searchユーザーがいくつかのオプションを指定してデータ行を表示できるアクションを介したページがあります。かなりの数のバックエンド ロジックが必要なため、このプロセスには数秒かかります。add_data返されたデータに対して、ユーザーは後で参照できるように、アクションを介して別のテーブルにデータの行を追加できます。

ユーザーが行を保存することを決定した場合にすぐに行を使用できるようにするために、検索結果データはテーブルに保存されることに注意してください (検索結果は複数のデータベースからのデータのコンパイルです)。アクションの後、ブラウザーをビューに移動させて検索結果がないリファラーに戻るのではなく、検索結果add_dataでビューを維持できるようにしたいと考えています。searchadd_data

ここで、検索結果を保存してsearchビューにロードするこのテーブルを確認できることはわかっていますが、データベースに問い合わせることなく、現在のアクション ビューをそのまま維持しながら、別のアクションを実行できるかどうかを知りたいと思っています。 . 私の知る限り$this->redirect(...)、検索結果ページの URL に引数 ( などmycontroller/search) がないため、どのような機能もありません。

次のコードを使用して、ユーザーが必要とするデータを追加するボタンを追加しました。

echo $this->Html->link('+', array('action' => 'add_data', $reference_id));    // + button is created

これを行う方法はありますか?できれば最小限の Javascript を使用してください。

4

2 に答える 2

2

こちらの手順に従って、cake プロジェクトに ajax サポートを追加してください。

次に、検索ビューをレンダリングするコントローラーで ajax ヘルパーを有効にします。

$this->helpers('Ajax');

次のようにリンクをレンダリングできるはずであり、ユーザーを検索ページから遠ざけることはありません。

<?php echo $this->Ajax->link(
  '+', 
  array('action' => 'add_data', $reference_id),
  array('update' => 'my-div')
); 
?>
<div id='my-div'></div>

ユーザーがそのアクションにデータを送信できるようにしたいので、単なるリンクではなくフォームの投稿を検討することをお勧めします。Ajax ヘルパーは、Ajax 経由でフォームを送信する機能も提供します。

echo $form->create();
echo $form->input('field1');
echo $form->input('field2');
echo $ajax->submit('Submit', array(
   'url'=> array('controller'=>'mycontroller', 'action'=>'add_data'),
   'update' => 'my-div'

));
echo $form->end();

あなたのコントローラーで....

function add_data() {
  // ... do something
  $this->layout = 'ajax';
  $this->set('message', 'Your message here!');
}

add_data ビューで....

<?php echo $message; ?>
于 2013-03-22T16:06:04.307 に答える
0

View::render メソッドを探していると思います。

<?php

...
function addData(...) {
    ...
    ...

    $this->render('search'); // Render the search view instead of the "add_data" view.
}
...

?>

または多分

<?php

...
function search(...) {
    ...
    ...

    if (<criteria)
        $this->addData(...); // Move to another action while keeping the current view in tact.
}
...
function addData(...) {
    if (<criteriaForSearchView>)
        $this->render('search');
    // Else render the "add_data" view.
}
...

?>

これが役立つかどうか教えてください!ありがとう!

于 2013-03-25T21:58:18.983 に答える