対応するモデルの変更を編集するためのグリッドと対応するフォームを備えた完全に機能するバックエンド ページがあります。ユーザーからの yes/no 構成オプションに応答するため、ビット タイプの新しいフィールドをテーブルに追加しました。グリッドとフォームの両方にチェックボックスを追加しました。
私の問題は、数時間検索してさまざまなアプローチを試した後checked
、グリッドとデータベースから対応するフィールドを読み取るフォームの両方でチェックボックスの値を設定できないことです。また、フォームの保存をクリックすると、チェックボックスに対応する値が常に1で保存されます。グリッドとフォームの他のすべては正常に機能します。ここ、ここ、ここ、ここ、その他のサイトとSOの質問/回答を読みましたが、何が間違っているのかまだわかりません。オプション付きのコンボボックスを使用することを推奨するソリューションもYES/NO
ありますが、チェックボックスが必要なので、それほど難しくありません。
関数内のグリッド コード_prepareColumns()
:
protected function _prepareColumns() {
...
$this->addColumn('banner_gral', array(
'header' => Mage::helper('banners')->__('General'),
'align' => 'center',
'index' => 'banner_gral',
'type' => 'checkbox',
'values' => $this->getBannerGral()==1 ? 'true' : 'false',
));
...
}
public function __construct()
{
parent::__construct();
$this->setId('bannersgrid');
$this->setDefaultSort('bannerid');
$this->setDefaultDir('asc');
$this->setSaveParametersInSession(true);
$this->setUseAjax(true);
}
public function getGridUrl()
{
return $this->getUrl('*/*/grid', array('_current'=>true));
}
protected function _prepareCollection()
{
$collection = Mage::getModel('banners/bannersadmin')->getCollection();
$this->setCollection($collection);
return parent::_prepareCollection();
}
関数内にチェックボックスを追加するフォーム コード_prepareForm()
:
protected function _prepareForm()
{
$id = $this->getRequest()->getParam('id');
$params = array('id' => $this->getRequest()->getParam('id'));
if (Mage::registry('banners_data')->getdata()) {
$data = Mage::registry('banners_data')->getdata();
}
elseif (Mage::getSingleton('adminhtml/session')) {
$data = Mage::getSingleton('adminhtml/session')->getdata();
Mage::getSingleton('adminhtml/session')->getdata(null);
}
else {
$data = array();
}
$form = new Varien_Data_Form(array(
'id' => 'edit_form',
'action' => $this->getUrl('*/*/save', $params),
'method' => 'post',
'enctype' => 'multipart/form-data',
));
...
$fieldset->addField('banner_gral', 'checkbox', array(
'label' => Mage::helper('banners')->__('Is general'),
'name' => 'banner_gral',
'class' => 'banner_gral',
'checked' => $this->getBannerGral()==1 ? 'true' : 'false',
'onclick' => 'this.value == this.checked ? 1 : 0',
'note' => Mage::helper('banners')->__('blablablabla'),
'tabindex' => 2
));
...
}
saveAction()
私のフォームには、次のものがあります。
$campaign->setbanner_gral(!empty($data['banner_gral']));