2009-12-09 7 views
1

J'ai ajouté un attribut à une entité d'adresse du client. Attribut Code de configuration est comme suit-Magento et désactivation d'un attribut booléen personnalisé

'entity_type_id'=>$customer_address_type_id, 
'attribute_code'=>'signature_required', 
'backend_type'=>'int', 
'frontend_input'=>'boolean', 
'frontend_label' => 'Signature required', 
'is_global' => '1', 
'is_visible' => '1', 
'is_required' => '0', 
'is_user_defined' => '0', 

J'ai alors -

  • attribut ajouté au modèle \ entité \ setup.php
  • ajouté un champ HTML sur le formulaire de modification

J'obtiens maintenant l'attribut enregistré dans la base de données lorsque la case est cochée. Toutefois, il n'est pas désactivé lorsque la case à cocher n'est pas cochée (je suppose que l'entrée de la case à cocher n'est pas «postée» si elle n'est pas cochée.)

Quelle est la meilleure façon de décocher cette case? 0? Ou unset/supprimer l'attribut avant d'enregistrer dans le contrôleur? Dois-je ajouter get/méthodes définies au modèle?

Répondre

3

en fin de compte, je l'emportaient sur la méthode setData dans mon modèle personnalisé.

J'ai trouvé certains good resources en essayant de remplacer/surcharger (les deux termes sont communs) contrôleurs/routeurs

Également de la note -

'frontend_input'=>'boolean', 

devrait être

'frontend_input'=>'checkbox', 
+1

Cela peut avoir été vrai dans une ancienne version de Magento, mais actuellement (Magento 1.8), 'checkbox' n'est pas un type fronted_input valide, mais Boolean est –

4

J'ai eu un problème similaire aujourd'hui, trouvé les différents guides d'être fastidieux et travaillé autour d'elle en changeant l'aide d'un « sélectionner » au lieu d'une « case » et le réglage de la "source" à eav/entity_attribute_source_boolean qui donne un simple "Oui"/"Non" liste déroulante et enregistre correctement sans modification.

0

Vous avez raison, le problème est que les cases à cocher non cochées ne sont pas envoyées via la requête POST.

Vous pouvez résoudre ce problème en plaçant une entrée de forme cachée avec une valeur de « 0 » avant votre case comme ceci:

<input type='hidden' name='my_checkbox' value='0'> 
<input type='checkbox' name='my_checkbox' value='1'> 

Maintenant, si la case est cochée, il sera envoyé par une valeur de « 1 » Si elle n'est pas cochée, elle enverra une valeur de '0'.

Je dois noter que ceci n'est vrai qu'en PHP parce que lorsque deux valeurs POST identiques sont envoyées, elle prend la dernière. Différents langages côté serveur peuvent gérer cela différemment

Questions connexes