我有一个网格,其中一个列中有按钮,如下所示: 如何在单击按钮时显示列表或新网格?
$grid=$page->add('Grid');
$grid->setModel('Tickets',array('subject','date','time','department','status','text'));
$grid->addColumn("button",'read_ticket_id','Read');
if($_GET['read_ticket_id']){
// this generates javascript to be executed on buttion click
//how can I show a lister or a new grid when the button clicked?
}
答案 0 :(得分:1)
查看ATK4键盘中的示例。 http://agiletoolkit.org/codepad/gui/grid
编辑: 这是我的一个页面的片段。也许你会发现它很有用。 这背后的想法是你实际上在这个IF语句中生成JavaScript然后JavaScript被发送回你的浏览器,然后可以再次请求某些东西(重新加载现有对象,创建新的,重定向到某个地方等)。
...
if($_GET['ticket']){
// Join this report with selected ticket
$this->grid->model->addToTicket($_GET['ticket']);
// Reload
$this->js(null,array(
$x->js()->reload(),
$this->js()->univ()->successMessage('Successfully saved')
))->execute();
}
...
使用$ _GET ['ticket'],您可以在网格中获得记录的ID,其中您单击了“添加到故障单”按钮。 $ x是此页面中的其他对象,例如,某些表单,字段,制表符或其他网格。使用$ this-> grid->模型,您可以参考与此网格关联的模型,在该模型中,我定义了自定义操作/方法 - addToTicket,它可以对数据库执行某些操作。
你也可以使用$ this-> js() - > redirect()或$ this-> js() - > location()等重定向到其他页面。基本上你可以做任何你想做的事情,但所有这些都需要生成JavaScript作为结果或说明您的浏览器下一步做什么。
不要忘记在最后添加 - > execute()!这将停止进一步解析您的页面,并立即生成JS响应。
答案 1 :(得分:1)
我找到了一个很好的例子:
http://agiletoolkit.org/doc/grid/interaction
==========
$g=$p->add('Grid');
$g->setSource('user');
$g->addColumn('name');
$g->addColumn('surname');
$g->addColumn('button','info','More Info');
$g->dq->where('name is not null')->limit(5);
if($_GET['info']){
$g->js()->univ()->dialogURL('More info',
$this->api->getDestinationURL(
null,array(
'more_info'=>$_GET['info'],
'cut_object'=>'myform'
)))
->execute();
}
if($_GET['more_info']){
$f=$this->add('Form','myform');
$f->addField('readonly','name');
$f->addField('readonly','surname');
$f->setSource('user');
$f->setConditionFromGET('id','more_info');
}