Я хотел бы создать атрибут только для чтения, однако это не представляется возможным.
Я пытался перейти на addAttribute () 'disabled' =>true
или 'readonly' => true
без какого-либо успеха. Я нашел какое-то предложение по использованию, setLockedAttributes()
но по какой-то причине оно не работает
Ссылка:
Varien_Data_Form_Element_Abstract::serialize($attributes = array(), $valueSeparator='=', $fieldSeparator=' ', $quote='"')
setLockedAttribute
, этоlockAttribute
:-)Ответы:
Из упомянутой статьи SO - я пытался, и это действительно работает на 1.6CE и 1.7CE / 1.12EE. Я еще не пробовал 1.8 / 1.13.
/programming/6384120/magento-read-only-and-hidden-product-attributes
источник
catalog_product_edit_action
Вместо этого я бы пошел с событием ( stackoverflow.com/a/7874345/394589 ), если блокировка должна выполняться только при редактировании ofc.Если для вас достаточно сделать его недоступным для редактирования в управлении продуктом, используйте тип ввода внешнего интерфейса
label
, который заменяет ввод формы простым текстом:Обратите внимание, что это не помешает сохранить атрибут через API или манипулированный запрос POST. Чтобы сделать это безопасным, дополнительно используйте
lockAttribute()
как предложено выше .Кроме того, это выглядит хорошо только для атрибутов текстового типа, для других типов, опять же, отступить
lockAttributes
или расширить тип «метка».источник
Чтобы это исправить, вы можете использовать для этого входной рендер. Недостатком является то, что вам придется делать это для каждого типа ввода и устанавливать это через настройку для каждого атрибута.
Для этого используйте ключ input_renderer при использовании addAttribute атрибута или frontend_input_renderer при использовании updateAttribute . Пример:
Затем своим классом
Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledText
расширяйте входной класс, который вы на самом деле используете. Для текстового поля это было быVarien_Data_Form_Element_Text
. Для избранных это будетVarien_Data_Form_Element_Select
и так далее.Теперь добавьте свой код следующим образом, чтобы отключить атрибут, переписать
getHtml
метод, установить атрибут и вернуть фактический HTML-код для поля ввода:Метод можно найти в lib / Varien / Data / Form / Abstract.php, который будет унаследован всеми полями входных элементов формы, поэтому он должен быть всегда доступен.
Вероятно, имеет смысл включить отключенный класс в настройку атрибута, как показано выше, чтобы визуализировать запрещенную возможность ввода. Возможно, вы также можете использовать
$this->addClass('disabled')
в методе, я еще не пробовал.источник