我通过操作search
创建了一个页面,用户可以在其中指定一些选项以显示数据行。此过程需要几秒钟,因为需要相当多的后端逻辑。在返回的数据上,用户可以通过操作add_data
将一行数据添加到另一个表中以供将来参考。
请注意,搜索结果数据会保存在表格中,以便在用户决定保存该行时可以随时使用该行(搜索结果是来自多个数据库的数据汇编)。在操作add_data
之后,我希望能够使用搜索结果维护search
视图,而不是让浏览器转到add_data
视图并返回引荐来源,其中将不会有搜索结果。
现在,我知道我可以检查这个表,我保存了搜索结果,只是将其加载到search
视图中,但我很想知道是否可以在保持当前操作视图完好无需咨询数据库。据我所知,没有任何$this->redirect(...)
有效,因为搜索结果页的网址缺少任何参数(例如mycontroller/search
)。
我添加了一个按钮,使用以下代码添加用户所需的数据:
echo $this->Html->link('+', array('action' => 'add_data', $reference_id)); // + button is created
有办法做到这一点吗?最好使用最小的Javascript。
答案 0 :(得分:2)
按照here步骤为蛋糕项目添加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; ?>
答案 1 :(得分: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.
}
...
?>
如果这有帮助,请告诉我!谢谢!