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']));
$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
Vous devez vous connecter pour publier un commentaire.
Dans votre contrôleur saveAction() lors de l'enregistrement de la case de données ne
Pour la Grille et le Formulaire de la Page
Dans votre contrôleur, vous devriez avoir Mage::register(...)->getData() ou Mage::register(...)
Sur votre formulaire _prepareForm()
voir http://www.magentocommerce.com/boards/viewthread/20536/
Sur votre grille _prepareColumns()
Voir mon code mis à jour... merci de modifier en tant que de besoin
Voir mon deuxième lien sur ma question, est le même, vous l'avez souligné. Cette solution renvoie toujours la valeur 1 si la case est toujours cochée. Juste au cas où, j'ai testé de nouveau, j'ai eu ce même résultat.
Jetez un oeil à mon code de mise à jour, il sera corrigé, vous question
Cette réponse fonctionne sauf pour moi, j'ai dû enlever les guillemets autour du "vrai" et "faux" de sorte que la ligne serait:
'checked' => $model->getBannerGral()==1 ? true : false
OriginalL'auteur Renon Stewart
@R. S a répondu à un problème, comment faire pour enregistrer de la case de valeur sur le modèle de base de données sur le terrain. Mais la question sur comment faire pour afficher correctement la case à cocher sur la grille et le formulaire n'a pas été résolu. Après avoir fait quelques recherches j'ai enfin réussi à ces deux liens qui m'ont aidé à résoudre mon problème.
Pour corriger la grille problème: La compréhension de la Grille Sérialiseur Bloc
Maintenant la partie du code où la case à cocher de la colonne est ajoutée, voir que j'ai ajouté
array(1,2)
sur levalues
élément.Aussi, si vous jetez un oeil dans le code de base de Magento, la classe
Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Checkbox
retourne un tableau de valeurs. En prenant un coup d'oeil ici, enfin, m'a mis dans le droit chemin.Pour corriger la forme de question: Mage_Adminhtml_Block_System_Store_edit_form De Référence De Classe
La question sur ce que j'ai essayé d'utiliser le
$this
mais ce que j'ai besoin d'utiliser le$data
qui est chargé au début de la_prepareForm
fonction. @R. S de relever la bonne direction, mais il n'est pas possible d'utiliser$model->getBannerGral()
comme le$data
sur le registre est un tableau, pas un modèle. Ainsi, l'utilisation de$data["banner_gral"]
j'ai pu obtenir la valeur nécessaire pour la case à cocher. Testé et il fonctionne.$data = Mage::registry('banners_data')->getdata();
je suis en train de faire$data = Mage::registry('banners_data');
de sorte que les différents entre$model->getBannerGral()
vs$data["banner_gral"]
Bon point, qui va prendre un coup d'oeil tout de suite et de test. Mais néanmoins, la grille était pas encore clair.
Avez-vous déjà pensé à modifier ma réponse? La seule façon que je peux vous fournir le code qui fonctionnent à 100% est si j'ai le temps de recréer votre code (que je n'obtiens pas les payer). Pourquoi devrais-je dépenser 2+ h vous aider si vous avez toujours tout prêt à accepter votre réponse à la fin (ce n'est pas la première fois). Aussi par la création d'un deuxième poste est base de mon post seulement confondre les autres utilisateurs qui tentent d'accomplir ce par avoir à lire thru deux post pour trouver la réponse.
A propos de la modification de votre réponse, cette méta.stackoverflow la question et les réponses peuvent vous donner un peu de lumière sur pourquoi je ne modifie pas votre réponse. En bref: Comment Modifier ► corriger les fautes d'orthographe ou de grammaire ► clarifier le sens sans le modifier ► corriger des erreurs mineures ► ajouter aux ressources connexes ou des liens ► toujours l'égard de l'auteur original
OriginalL'auteur Yaroslav