이 문제를 해결하기 위해 입력 렌더러를 대신 사용할 수도 있습니다. 단점은 각 입력 유형에 대해이 작업을 수행하고 각 속성에 대해 설정을 통해 설정해야한다는 것입니다.
그렇게하려면 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;
}
거부 된 입력 가능성을 시각화하기 위해 위와 같이 속성 설정에 disabled 클래스 를 포함시키는 것이 좋습니다. 아마도 $this->addClass('disabled')
메소드에서 사용할 수도 있습니다 . 아직 시도하지 않았습니다.