0

アジャイル ツールキットを使用しています。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();

            }

    }
}

ご協力ありがとう御座います !!

4

2 に答える 2

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 {

このページ内で、「追加」クリックなしでフォームを表示する方法を定義します。私はあなたの質問を完全には理解していませんが、これらの指示を使用すると、クラッドに新しいエントリを追加するときに別のページを表示させることができます。

于 2012-07-11T17:12:29.717 に答える
0

これが私が試したRomansの代替です。$this->api->memorize を使用して、ドロップダウン リストで選択した GET 変数をセッション変数に格納します。次に、フォームで、モデルでリコールを使用して、選択した値をデフォルトに設定できます。

このようなもの

ページ内/物事

 // 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'));

system(true) と visible(False) は、表示されず、CRUD で変更できないことを意味しますが、CRUD グリッドには表示されますがフォームには表示されないように、オプションをいじることができます。

最後に、リロードを機能させるための JavaScript を少し追加します (Romans はこれを行うためのより良い方法をアドバイスするかもしれません)。yourfunc がページと js で一致していることを確認してください。

/templates/js/your_univ.js に以下を追加します

    $.each({
        yourfunc: function(url, name){
              document.location.href=url+'&cat='+$(name).val();
        },
    },$.univ._import);

私は自分のページでこれに似たコードを持っています。猫をURLに表示させたくない場合は、ドロップダウンがフォームであるのと同様に、おそらくPOSTとして機能させることができます。

于 2012-07-11T19:39:57.857 に答える