【发布时间】:2012-12-06 06:44:23
【问题描述】:
在编辑添加条目时必须可见的条目时尝试隐藏字段时遇到问题。
我的表结构如下:
equip_items
--------------
id (pk)
equip_type_id (fk to equip_types)
site_id (fk to sites)
equip_status_id (fk to equip_status)
name
(equip_type_id, site_id, name) 是 db 中的复合唯一键约束。我已经在处理唯一约束的grocery_CRUD验证的名称字段上实现了一个回调 - 考虑到编辑现有的或添加新的equip_items。
function unique_equip_item_check($str, $edited_equip_item_id){
$var = $this->Equip_Item_model->is_unique_except($edited_equip_item_id,$this->input->post('site_id'),$this->input->post('equip_type_id'),$this->input->post('name'));
if ($var == FALSE) {
$s = 'You already have an equipment item of this type with this name.';
$this->form_validation->set_message('unique_equip_item_check', $s);
return FALSE;
} else {
return TRUE;
}
}
我将 site_id 和equip_type_id 设置为隐藏字段,因为我不希望用户更改这些 - 没问题。
$crud->field_type('site_id', 'hidden', $site_id);
$crud->field_type('equip_status_id', 'hidden', iQS_EqStatus_InUse);
当用户添加equip_item 时,我希望他们能够从类型列表中选择equip_type - 没问题,这是默认的grocery_CRUD 行为。
$crud->add_fields('equip_status_id', 'site_id', 'equip_type_id', 'name');
当用户编辑equip_item 时,我不希望用户能够编辑equip_type。我认为没问题我可以将edit_fields设置为排除equip_type_id:
$crud->edit_fields('equip_status_id', 'site_id', 'name', 'barcode_no');
但这会对我的验证回调造成严重破坏,因为equip_type_id 字段的值不在编辑表单上,而且我的验证例程显然需要它。
所以我需要让equip_type_id 字段在添加新记录时可见并正常运行,但在编辑记录时隐藏。
我已经尝试过所有 hack 中的这个 hack:
if ($this->uri->segment(4)!= FALSE){$crud->field_type('equip_type_id', 'hidden');}
我的理论是“$this->uri->segment(4)”在添加新记录时只会给出错误的结果,但它不起作用。
我也试过了:
$crud->callback_edit_field('equip_type_id', array($this,'edit_equip_type_field_callback'));
与
function edit_equip_type_field_callback($value = '', $primary_key = null){
return '<input type="hidden" value="'.$value.'" name="equip_type_id"';
}
但这不起作用,它只会破坏表单字段的布局 - “类型”标签等仍然可见。
有什么建议吗?
【问题讨论】:
-
您可以将表单元素本身设置为禁用吗?这样它就在那里但不可编辑。我根本不知道 Grocery_crud,但对我来说最简单的解决方案就是在隐藏的表单字段中手动添加设备类型,但也许有某些原因你不能这样做?
标签: codeigniter hidden-field grocery-crud