我正在使用Agile Toolkit。我的CRUD中有一个下拉字段。
如果点击“编辑”按钮,如何在此下拉列表中显示“新建”按钮显示不同的值集?
这是我的代码:
class page_things extends Page {
function init(){
parent::init();
$p = $this;
$f = $p->add('Form');
$idCat = ($f->get('idCat')?$f->get('idCat'):$this->api->getConfig('idCat','MASP2U03'));
$dpUE = $f->addField('dropdown', 'Category');
$dpUE->setModel('Category');
$dpUE->js('change',$f->js()->submit());
$dpUE->set($idCat);
$f->addSubmit('OK');
$c = $f->add('CRUD');
$c->setModel('things',array('name', 'field1', 'field2', 'field3'))->setMasterField('idCat',$idCat);
if($f->isSubmitted()){
$c->js(true)->show()->execute()->reload()->execute();
}
}
}
谢谢你的帮助!!
答案 0 :(得分:0)
使用
$crud=$this->add('CRUD',array('allow_add'=>false));
禁用默认添加按钮,然后添加自己的按钮:
if($crud->grid)$crud->grid->addButton('Add')->js('click')
->frameURL('Add',$this->api->url('./new'));
在此之后,您需要创建一个新页面
class page_things_new extends Page {
并在此页面内定义表单的方式,使其显示没有“添加”单击。我不完全理解您的问题,但是通过这些说明,您可以在向您的问题添加新条目时显示不同的页面。
答案 1 :(得分:0)
这是我尝试过的罗马人的替代品。它使用$ this-> api> memorize来存储在会话变量的下拉列表中选择的GET变量。然后在表单中,您可以通过在模型中使用调用来设置默认值。
像这样的东西
in page / things
// load the javascript function (see later)
$this->js()->_load('your_univ');
/*****************************************************************/
/* Code to populate drop down lists - amend where as required*/
$catList=$this->api->db->dsql()->table('category c')
->field('c.id')
->field('c.name')
->where('c.type',$cat_type)
->order('c.id')
->do_getAssoc();
// Check if one is set on URL or default from config and memorize the value
if ($_GET['cat']){
$cat=$_GET['cat'];
} else {
$cat=$this->api-getConfig('idCat');
}
$this->api->memorize('category',$cat);
$f=$p->add('Form',null,null,array('form_empty'))
->setFormClass('horizontal bottom-padded');
$l1=$f->addField('dropdown','category')->setValueList($catList)->set($cat);
// calls a bit of javascript described later to reload with the parameter
$l1->js('change')->univ()->yourfunc($p->api->getDestinationURL(null), $l1);
.. rest of your page code goes here ..
然后在/lib/Model/Category.php
中为字段添加以下召回
$this->addField('idCat')->system(true)->visible(false)
->defaultValue($this->api->recall('category'));
注意系统(true)和可见(False)意味着它不会显示并且不能在CRUD上更改,但你可以使用选项,以便它显示在CRUD网格中但不在表单中。
最后,一点点javascript使重载工作(罗马人可能建议更好的方法来做到这一点)。确保yourfunc在页面和js中匹配。
在/templates/js/your_univ.js中添加以下内容
$.each({
yourfunc: function(url, name){
document.location.href=url+'&cat='+$(name).val();
},
},$.univ._import);
我在我自己的页面中有类似的代码。您可以将其作为POST工作,如果您不希望猫在URL上显示,则下拉列表就是一个表单。