要解决此问题,您可以选择为此使用输入渲染器。不利的一面是,您必须为每种输入类型执行此操作,然后通过设置每个属性来进行设置。
为此,在使用addAttribute属性时使用input_renderer键,在使用updateAttribute时使用frontend_input_renderer。例:
$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')在该方法中使用,我还没有尝试过。