これを修正するには、代わりに入力レンダラーを使用します。欠点は、入力タイプごとにこれを行い、各属性のセットアップを介してこれを設定する必要があることです。
そのためには、使用input_rendererの使用時にキーをaddAttributeを属性またはfrontend_input_rendererを使用している場合updateAttributeを。例:
$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
実際に使用する入力クラスを拡張します 。テキストフィールドの場合はになりますVarien_Data_Form_Element_Text
。選択の場合などになりますVarien_Data_Form_Element_Select
。
次のようなコードを追加して、属性を無効にし、getHtml
メソッドを上書きし、属性を設定して、入力フィールドの実際のHTMLコードを返します。
public function getHtml()
{
// Set disabled
$this->setReadonly(true, true);
return parent::getHtml();
}
このメソッドはlib / Varien / Data / Form / Abstract.phpにあり、すべてのフォーム入力要素フィールドに継承されるため、常に利用可能である必要があります。
/**
* 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;
}
上記のように、無効なクラスを属性設定に含めて、拒否された入力の可能性を視覚化することはおそらく意味があります。$this->addClass('disabled')
メソッドで使用することもできますが、まだ試していません。