我的checkboxes
文件中的Joomla 2.5
中有多个.xml
字段
<field name="player_number"
type="text"
label="Player number"
description="Enter Player's number here"
class="inputbox"
size="30"
required="true"
/>
<field name="player_dob" type="calendar" default="" label="Select a date" description="" required="true" format="%Y-%m-%d" />
<field name="player_position" type="checkboxes">
<option value="Left">Left</option>
<option value="Right">Right</option>
<option value="Middle">Middle</option>
</field>
我在数据库中有相关数据列,例如player_number
,player_dob
和player_position
。
我有工具栏,我可以在其中添加NEW
记录或EDIT
现有记录。
我可以成功ADD
player_number
和player_dob
以及EDIT
视图中的退出值。
问题是CHECKBOX值不会保存到数据库中。
即使我从player_position
输入phpmyadmin
的值,相关值也不会在编辑视图表单中显示为CHECKED
答案 0 :(得分:1)
令人讨厌的是,这个字段类型在文档中说明“它将为您创建复选框,并以数组的形式提交它们的值,但它不会将它们存储在数据库中。”
这意味着如果要保存JTable存储功能,则必须覆盖它。 http://docs.joomla.org/API16:JTable/store
以下代码是我上次使用Joomla 3时使用的相关代码(2.5应该类似)。 demofield
是我的复选框的名称,edit
是复选框显示的视图名称。此覆盖保存在admin / tables / edit.php下:
class TableEdit extends JTable {
public function store($updateNulls = true)
{
JArrayHelper::toString($this->demofield);
$this->demofield= implode(',', $this->demofield);
return parent::store($updateNulls);
}
}
值得注意的是列表字段类型允许多选,并将保存在数据库中。这可能是一个更简单的解决方案。 http://docs.joomla.org/List_form_field_type
答案 1 :(得分:0)
可以在表单中生成一组复选框,其中包含以下单个语句:
<?php echo $this->form->getInput('player_position'); ?>
这将生成以下HTML,可以使用CSS设置样式:
<fieldset id="jform_player_position" class="checkboxes">
<ul>
<li><input type="checkbox" id="jform_player_position0"
name="jform[player_position][]" value="Left" /><label for="jform_player_position0">Left</label></li>
<li><input type="checkbox" id="jform_player_position1"
name="jform[player_position][]" value="Right" /><label for="jform_player_position1">Right</label></li>
<li><input type="checkbox" id="jform_player_position2"
name="jform[player_position][]" value="Middle" /><label for="jform_player_position2">Middle</label></li>
</ul>
如果用户检查第一个和第三个项目并提交表单,Joomla服务器将提供以下结果:
print_r(JRequest::getVar('jform')['player_position']) =>
Array (
[0] => Left
[1] => Middle
)