Magento, ajouter et définir une case à cocher sur la grille et la forme backend

J'ai un travail entièrement backend page avec une grille et un formulaire pour modifier les changements sur le modèle correspondant. J'ai ajouté un nouveau champ sur la table, le type bit, comme il peut répondre à un oui/non de l'option de configuration de l'utilisateur. J'ai ajouté la case à cocher sur la grille et en forme.

Mon problème est que après quelques heures de recherche et de tenter des approches différentes, je ne peux pas définir la case checked valeur à la fois sur la grille et la forme de la lecture du champ correspondant dans la base de données. Aussi quand je clique sur enregistrer sur le formulaire la valeur correspondant à la case est toujours enregistré avec 1. Tout le reste sur la grille et la forme fonctionne comme il se doit. J'ai lu ici, ici, ici, ici et quelques autres sites et DONC, les questions/réponses mais toujours pas la moindre idée sur ce que je fais mal. Certaines solutions vous recommandons d'utiliser une liste déroulante avec YES/NO options, mais je veux une case à cocher, ne peut pas être si difficile.

Code de réseau à l'intérieur de la fonction _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();
}

Forme de code à ajouter la case à cocher à l'intérieur de la fonction _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
    ));
    ...
}

Sur le saveAction() de mon formulaire, j'ai:

$campaign->setbanner_gral(!empty($data['banner_gral']));
Pouvez-vous ajouter votre saveAction() code de la case, vous faire besoin de faire quelque chose comme $banner_gral = isset($formDate['banner_gral']) ? 1 : 0;
Où devrais-je ajouter ce code @R. S? Sur la forme? Comme un nouvel élément de tableau ou à l'extérieur de la fonction? Je suis nouveau sur magento, c'est pourquoi je me demande si mucho.
Dans votre contrôleur saveAction méthode
J'ai eu quelque chose de similaire,édité ma question à poster ce code. Maintenant va changer à utiliser votre extrait de code et test...2min après, pas de travail, la valeur est toujours égale à zéro.
Relisez cette bande de roulement stackoverflow.com/questions/13292772/... de sorte que nous ne courent pas dans la même cause comme la dernière fois

OriginalL'auteur Yaroslav | 2012-12-04