Forms Magento,在网格和表单后端上添加并设置复选框

Forms Magento,在网格和表单后端上添加并设置复选框,forms,magento,checkbox,magento-1.7,backend,Forms,Magento,Checkbox,Magento 1.7,Backend,我有一个完全工作的后端页面,带有一个网格和一个相应的表单来编辑相应模型上的更改。我在表中添加了一个新字段bit type,因为它将回答用户的yes/no配置选项。我在网格和表单上都添加了复选框 我的问题是,经过几个小时的搜索和尝试不同的方法后,我无法在网格和从数据库读取相应字段的表单上设置复选框checked值。此外,当我单击表单上的save(保存)时,与复选框对应的值总是以1保存。网格和表单上的所有其他内容都按其应有的方式工作。我读过、和更多的网站,但仍然不知道我做错了什么。一些解决方案建议使

我有一个完全工作的后端页面,带有一个网格和一个相应的表单来编辑相应模型上的更改。我在表中添加了一个新字段bit type,因为它将回答用户的yes/no配置选项。我在网格和表单上都添加了复选框

我的问题是,经过几个小时的搜索和尝试不同的方法后,我无法在网格和从数据库读取相应字段的表单上设置复选框
checked
值。此外,当我单击表单上的save(保存)时,与复选框对应的值总是以1保存。网格和表单上的所有其他内容都按其应有的方式工作。我读过、和更多的网站,但仍然不知道我做错了什么。一些解决方案建议使用带有
YES/NO
选项的组合框,但我想要一个复选框,这不会太难

函数中的网格代码
\u prepareColumns()

将复选框添加到函数中的表单代码
\u prepareForm()

在我表格的
saveAction()
上,我有:

$campaign->setbanner_gral(!empty($data['banner_gral']));

在控制器中,保存复选框数据时执行saveAction()

$banner_gral = isset($your_form_Data['banner_gral']) ? 1 : 0;
用于网格和表单页面

在控制器中,您应该有Mage::register(…)->getData()或Mage::register(…)

在您的表格上_prepareForm()

在您的网格上_prepareColumns()


@R.S回答了一个问题,即如何在相应的模型/数据库字段上保存复选框值。但是如何在网格和表单上正确显示复选框的问题没有得到解决。在做了更多的搜索之后,我终于找到了这两个帮助我解决问题的链接

要更正网格问题,请执行以下操作:

现在代码中添加复选框列的部分,请参见我在
元素上添加的
数组(1,2)

$this->addColumn('banner_gral', array(
        'header'   => Mage::helper('banners')->__('General'),
        'width'    => '20px',
        'type'     => 'checkbox',
        'align'    => 'center',
        'index'    => 'banner_gral',
        'values'   => array(1,2),
        'editable' => 'false',
));
此外,如果查看Magento的核心代码,则类
Mage\u Adminhtml\u Block\u Widget\u Grid\u Column\u Renderer\u复选框
将返回一个值数组。看看这里,我终于走上了正确的道路

/**
 * Returns values of the column
 *
 * @return array
 */
public function getValues()
{
    if (is_null($this->_values)) {
        $this->_values = $this->getColumn()->getData('values') ? $this->getColumn()->getData('values') : array();
    }
    return $this->_values;
}
要更正表单问题,请执行以下操作:

这个案例的问题是,我试图使用
$this
,但我需要使用
$data
,它是在
\u prepareForm
函数的开头加载的@R.S指出了正确的方向,但无法使用
$model->getBannerGral()
,因为注册表上的
$data
是数组,而不是模型。因此,使用
$data[“banner_gral”]
我可以获得复选框所需的值。经过测试,它正在工作

$fieldset->addField('banner_gral', 'checkbox', array(
        'label'    => Mage::helper('banners')->__('Is general'),
        'name'     => 'banner_gral',
        'checked'  => $data["banner_gral"],
        'onclick'  => 'this.value = this.checked ? 1 : 0;',
        'note'     => Mage::helper('banners')->__('blablablabla'),
        'tabindex' => 2
));

是否可以为复选框添加saveAction()代码,您需要执行类似于
$banner\u gral=isset($formDate['banner\u gral'])的操作?1 : 0;我应该在何处添加此代码@R.S?在表格上?作为新数组元素还是函数外部?我是magento的新手,这就是我问这么多问题的原因。在你的控制器saveAction方法中,我有类似的东西,编辑了我的问题以发布代码。现在将其更改为使用您的代码段和测试…2分钟后,不工作,值始终为零。请重新阅读此步骤,以便我们不会像上次一样在同一问题中运行。很好,现在仍然在网格上显示正确的值,并且表单仍将继续。根据这个关于saveAction的解决方案,我将检查更多我之前没有检查过的代码。在我的问题上看到我的第二个链接,与您指出的相同。此解决方案始终返回1,因此复选框始终处于选中状态。为了以防万一我再次测试,我得到了同样的结果。谢谢,明天第一个小时我会在办公室检查一下……我的代码中已经有了你发布的
Mage::register/registry
代码片段,所以仍然不起作用。我将更新我的问题以添加代码。此答案对我有效,但我必须删除“真”和“假”周围的引号,因此行将为:
“选中”=>$model->getBannerGral()==1?真:假
看看我的代码。。。您的操作
$data=Mage::registry('banners_data')->getdata()我正在做
$data=Mage::registry('banner_data')
这样,与
$model->getBannerGral()
$data[“banner\u gral”]
之间的差异将立即查看并测试。但是,网格部分仍然不清楚。你有没有想过编辑我的答案?我能为您提供100%有效的代码的唯一方法是,如果我花时间重新创建您的代码(我不会为此付费)。如果你最终总是接受你的答案(这不是第一次),我为什么要花2个多小时来帮助你呢。另外,通过创建第二篇文章,我的文章只会让其他试图通过阅读两篇文章来找到答案的用户感到困惑。关于编辑你的答案,问题和答案可能会让你了解我为什么不编辑你的答案。简而言之:如何编辑► 修正语法或拼写错误► 澄清意思而不改变它► 纠正小错误► 添加相关资源或链接► 永远尊重原作者
$model = Mage::registry('example_data'); // NOTE registry('example_data'); NOT registry('example_data')->getData();

$fieldset->addField('entire_range', 'checkbox', array(
      ....
      'checked'    => $model->getBannerGral()==1 ? 'true' : 'false',
       ......
))
$this->addColumn('banner_gral', array(
    ....
    'type'     => 'checkbox',
    'index'    => 'banner_gral',
    'values'   => array(1,2),
    'field_name' => 'checkbox_name',
    ....
));
$this->addColumn('banner_gral', array(
        'header'   => Mage::helper('banners')->__('General'),
        'width'    => '20px',
        'type'     => 'checkbox',
        'align'    => 'center',
        'index'    => 'banner_gral',
        'values'   => array(1,2),
        'editable' => 'false',
));
/**
 * Returns values of the column
 *
 * @return array
 */
public function getValues()
{
    if (is_null($this->_values)) {
        $this->_values = $this->getColumn()->getData('values') ? $this->getColumn()->getData('values') : array();
    }
    return $this->_values;
}
$fieldset->addField('banner_gral', 'checkbox', array(
        'label'    => Mage::helper('banners')->__('Is general'),
        'name'     => 'banner_gral',
        'checked'  => $data["banner_gral"],
        'onclick'  => 'this.value = this.checked ? 1 : 0;',
        'note'     => Mage::helper('banners')->__('blablablabla'),
        'tabindex' => 2
));