Để sửa lỗi này, bạn có thể sử dụng một trình kết xuất đầu vào cho việc này. Nhược điểm là, bạn sẽ phải làm điều này cho từng loại đầu vào và thiết lập điều này thông qua thiết lập cho từng thuộc tính.
Để làm như vậy, hãy sử dụng khóa input_Vnderer khi sử dụng addAttribution một thuộc tính hoặc frontend_input_Vnderer khi sử dụng updateAttribution . Thí dụ:
$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',
// ...
));
Sau đó, với lớp của bạn Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledText
mở rộng lớp đầu vào mà bạn thực sự sẽ sử dụng. Đối với một trường văn bản, nó sẽ được Varien_Data_Form_Element_Text
. Đối với lựa chọn nó sẽ được Varien_Data_Form_Element_Select
và như vậy.
Bây giờ hãy thêm mã của bạn như thế này để vô hiệu hóa thuộc tính, ghi đè getHtml
phương thức, đặt thuộc tính và trả về mã HTML thực tế cho trường đầu vào:
public function getHtml()
{
// Set disabled
$this->setReadonly(true, true);
return parent::getHtml();
}
Phương thức có thể được tìm thấy trong lib / Varien / Data / Form / Abstract.php sẽ được kế thừa bởi tất cả các trường phần tử đầu vào của biểu mẫu, vì vậy nó sẽ có sẵn.
/**
* 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;
}
Có lẽ hợp lý khi bao gồm lớp bị vô hiệu hóa trong thiết lập thuộc tính như được hiển thị ở trên để trực quan hóa khả năng nhập bị từ chối. Bạn có thể cũng có thể sử dụng $this->addClass('disabled')
trong phương pháp, tôi chưa thử điều này.