Можно ли форсировать значение нового поля формы CRUD?
Я использую 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 ответа
Использование
$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 {
и внутри этой страницы определите форму так, как вы хотите, чтобы она отображалась без нажатия кнопки "Добавить". Я не до конца понимаю ваш вопрос, но с помощью этих инструкций у вас может появиться другая страница при добавлении новых записей в ваш crud.
Вот альтернатива римлянам, которую я пробовал. Он использует $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'));
Обратите внимание, что система (true) и видимая (False) означает, что она не будет отображаться и не будет изменяемой в CRUD, но вы можете поэкспериментировать с параметрами, чтобы они отображались в сетке CRUD, но не в форме.
Наконец, немного javascript для перезагрузки (римляне могут посоветовать лучший способ сделать это). Убедитесь, что ваша функция соответствует на странице и в js.
в /templates/js/your_univ.js добавьте следующее
$.each({
yourfunc: function(url, name){
document.location.href=url+'&cat='+$(name).val();
},
},$.univ._import);
У меня есть код, похожий на этот, работающий на моих собственных страницах. Вы, вероятно, можете заставить его работать как POST, так как выпадающий список является формой, если вы не хотите, чтобы кошка отображалась в URL.