是否可以强制新CRUD表单字段的值?

时间:2012-07-11 15:35:55

标签: php user-interface frameworks atk4

我正在使用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();

            }

    }
}

谢谢你的帮助!!

2 个答案:

答案 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上显示,则下拉列表就是一个表单。