无法在数据库中保存CHECKBOX字段类型 - Joomla 2.5

时间:2014-07-08 05:49:05

标签: php mysql joomla

我的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_numberplayer_dobplayer_position

我有工具栏,我可以在其中添加NEW记录或EDIT现有记录。

我可以成功ADD player_numberplayer_dob以及EDIT视图中的退出值。

问题是CHECKBOX值不会保存到数据库中。

即使我从player_position输入phpmyadmin的值,相关值也不会在编辑视图表单中显示为CHECKED

2 个答案:

答案 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
)