Je voudrais créer un attribut en lecture seule mais il semble que ce ne soit pas possible.
J'ai essayé de passer à addAttribute () 'disabled' =>true
ou 'readonly' => true
sans succès. J'ai découvert une suggestion d'utilisation, setLockedAttributes()
mais pour une raison quelconque, cela ne fonctionne pas
Référence:
Varien_Data_Form_Element_Abstract::serialize($attributes = array(), $valueSeparator='=', $fieldSeparator=' ', $quote='"')
setLockedAttribute
, c'estlockAttribute
:-)Réponses:
De l'article référencé SO - j'ai essayé et cela fonctionne en effet sur 1.6CE et 1.7CE / 1.12EE. Je n'ai pas encore essayé sur 1.8 / 1.13.
/programming/6384120/magento-read-only-and-hidden-product-attributes
la source
catalog_product_edit_action
plutôt avec l' événement ( stackoverflow.com/a/7874345/394589 ), si le verrouillage doit être effectué uniquement lors de la modification de ofc.S'il vous suffit de le rendre non modifiable dans la gestion des produits, utilisez le type d'entrée frontend
label
, qui remplace l'entrée du formulaire par du texte brut:Notez que cela n'empêchera pas l'enregistrement de l'attribut via l'API ou la requête POST manipulée. Pour le sécuriser, utilisez également
lockAttribute()
comme suggéré ci-dessus .De plus, cela ne semble bon que pour les attributs de type texte, pour les autres types, encore une fois, retenez
lockAttributes
ou étendez le type "label".la source
Pour résoudre ce problème, vous pouvez également utiliser un rendu d'entrée pour cela. L'inconvénient est que vous devez le faire pour chaque type d'entrée et le définir via la configuration pour chaque attribut.
Pour ce faire, utilisez la clé input_renderer lorsque vous utilisez addAttribute un attribut ou frontend_input_renderer lorsque vous utilisez updateAttribute . Exemple:
Ensuite, avec votre classe,
Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledText
étendez la classe d'entrée que vous utiliseriez réellement. Pour un champ de texte, ce seraitVarien_Data_Form_Element_Text
. Pour les sélections, ce seraitVarien_Data_Form_Element_Select
et ainsi de suite.Ajoutez maintenant votre code comme celui-ci pour désactiver l'attribut, en écrasant la
getHtml
méthode, en définissant l'attribut et en renvoyant le code HTML réel pour le champ de saisie:La méthode peut être trouvée dans lib / Varien / Data / Form / Abstract.php qui sera héritée par tous les champs des éléments d'entrée du formulaire, elle devrait donc toujours être disponible.
Il est probablement judicieux d'inclure la classe désactivée dans la configuration d'attribut comme indiqué ci-dessus pour visualiser la possibilité d'entrée refusée. Vous pouvez probablement aussi l'utiliser
$this->addClass('disabled')
dans la méthode, je n'ai pas encore essayé cela.la source