Question

Je voudrais créer un attribut lecture seule mais il regarder, il est impossible.

J'ai essayé de passer à addAttribute () 'disabled' =>true ou 'readonly' => true avec toute réussite. Je l'ai trouvé une suggestion sur l'utilisation setLockedAttributes() mais pour une raison quelconque, il ne fonctionne pas

Référence: Varien_Data_Form_Element_Abstract::serialize($attributes = array(), $valueSeparator='=', $fieldSeparator=' ', $quote='"')

Était-ce utile?

La solution

De l'article référencé SO - j'ai essayé et cela fonctionne bien sur 1.6CE et 1.7CE / 1.12EE. Je ne l'ai pas essayé 1,8 / 1,13 pour l'instant.

https://stackoverflow.com/questions/6384120/magento-read -Seulement-et-produit caché attributs

  

OK, il semble que cela peut se faire après tout. Après avoir ajouté un observateur   pour l'événement catalog_product_load_after, la méthode de lockAttribute   la classe Mage_Catalog_Model_Abstract peut être utilisé pour fabriquer un produit   attribut lecture seule. Voici le code pour la méthode d'observation:

public function lockAttributes($observer) {
    $event = $observer->getEvent();
    $product = $event->getProduct();
    $product->lockAttribute('attribute_code');
}

Autres conseils

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 de formulaire avec le texte brut:

addAttribute($entity, $code, array(
    ...
    'input' => 'label',
    ...
));

Notez que cela empêche pas sauver l'attribut via l'API ou manipulé requête POST. Pour le sécuriser, utiliser en plus lockAttribute() comme suggéré ci-dessus .

il semble que bon aussi pour les attributs de type texte, pour d'autres types, encore une fois, revenir à lockAttributes ou d'étendre le type « label ».

Pour faire que ce soit réglé, vous pouvez également utiliser un moteur de rendu d'entrée pour cela. L'inconvénient est, vous devez le faire pour chaque type d'entrée et réglez cette configuration via pour chaque attribut.

Pour ce faire, utilisez le input_renderer lorsque l'utilisation de addAttribute un attribut ou frontend_input_renderer lorsque vous utilisez updateAttribute . Exemple:

$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'yourattribute', array(
// ...
// won't be used actually as you use a custom renderer (constant equals to text), but I'm not sure what omitting this will have as effect..
    'input' => Mage_Catalog_Model_Product_Option::OPTION_GROUP_TEXT,
    'input_renderer' => 'yourns_yourmodule/adminhtml_product_helper_form_disabledText',
    'frontend_class' => 'disabled',
    'note' => 'This field is disabled',
// ...
));

Ensuite, avec votre classe Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledText étendre la classe d'entrée vous serait effectivement utiliser. Pour un champ de texte, il serait Varien_Data_Form_Element_Text. Pour le sélectionne serait Varien_Data_Form_Element_Select et ainsi de suite.

Maintenant ajoutez votre code comme ceci pour désactiver l'attribut, la méthode de l'écrasement getHtml, définissant l'attribut et renvoyer le code HTML réel pour le champ de saisie:

public function getHtml()
{
    // Set disabled
    $this->setReadonly(true, true);
    return parent::getHtml();
}

La méthode peut être trouvée dans lib / Varien / Données / Forme / Abstract.php qui sera héritée par tous les champs d'éléments d'entrée de forme, il devrait donc alaways disponible.

/**
 * Disable elements
 *
 * @param boolean $readonly
 * @param boolean $useDisabled
 * @return Varien_Data_Form_Abstract
 */
public function setReadonly($readonly, $useDisabled = false)
{
    if ($useDisabled) {
        $this->setDisabled($readonly);
        $this->setData('readonly_disabled', $readonly);
    } else {
        $this->setData('readonly', $readonly);
    }
    foreach ($this->getElements() as $element) {
        $element->setReadonly($readonly, $useDisabled);
    }

    return $this;
}

Il est probablement senseful d'inclure les désactivé classe dans la configuration de l'attribut comme indiqué ci-dessus pour visualiser la possibilité d'entrée refusée. Vous pouvez probablement utiliser aussi $this->addClass('disabled') dans la méthode, je ne l'ai pas essayé ce encore.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top