Um dies zu beheben, können Sie alternativ einen Eingabe-Renderer verwenden. Der Nachteil ist, dass Sie dies für jeden Eingabetyp tun und dies über das Setup für jedes Attribut einstellen müssen.
Verwenden Sie dazu den Schlüssel input_renderer, wenn Sie ein Attribut addAttribute verwenden , oder frontend_input_renderer, wenn Sie updateAttribute verwenden . Beispiel:
$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',
// ...
));
Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledText
Erweitern Sie dann mit Ihrer Klasse die Eingabeklasse, die Sie tatsächlich verwenden würden. Für ein Textfeld wäre es Varien_Data_Form_Element_Text
. Für Auserwählte wäre es Varien_Data_Form_Element_Select
und so weiter.
Fügen Sie nun Ihren Code wie folgt hinzu, um das Attribut zu deaktivieren, die getHtml
Methode zu überschreiben , das Attribut festzulegen und den tatsächlichen HTML-Code für das Eingabefeld zurückzugeben:
public function getHtml()
{
// Set disabled
$this->setReadonly(true, true);
return parent::getHtml();
}
Die Methode befindet sich in der Datei lib / Varien / Data / Form / Abstract.php, die von allen Feldern der Formulareingabeelemente übernommen wird und daher immer verfügbar sein sollte.
/**
* 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;
}
Es ist wahrscheinlich sinnvoll, die deaktivierte Klasse wie oben gezeigt in das Attribut-Setup aufzunehmen, um die Möglichkeit der verweigerten Eingabe zu veranschaulichen. Sie können wahrscheinlich auch $this->addClass('disabled')
in der Methode verwenden, ich habe dies noch nicht ausprobiert.