これが私が試した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として機能させることができます。