Есть ли способ отключить изменение SKU, который уже был создан в Magento?
В Magento при создании нового продукта вы можете вручную ввести номер SKU. Позже вы можете изменить этот номер SKU на другой номер. Есть ли способ запретить это в Magento? После того, как номер SKU назначен, я хочу, чтобы он всегда был SKU - я не хочу, чтобы мои пользователи вместо этого назначали другой SKU.
2 ответа
Я могу подумать о двух подходах: наблюдатель событий и пользовательская модель бэкэнда атрибута для атрибута SKU, последний является более тщательным решением.
Для наблюдателя событий можно наблюдать сравнение значения свойства SKU, посмотреть, изменилось ли оно, и установить его в исходное значение с предупреждением. Этого должно быть достаточно, если атрибут SKU не сохранен с помощью saveAttribute()
, так далее.
Также можно выполнить ту же логику в модели бэкэнда атрибута EAV, которую можно легко присвоить атрибуту через скрипт установки. Тем не менее, в случае атрибута SKU, он уже имеет бэкэнд-модель, Mage_Catalog_Model_Product_Attribute_Backend_Sku
[ссылка]. Было бы довольно легко переписать validate()
метод, использующий стандартный класс Magento, переписывает, добавляет требуемую логику защиты значений и затем вызывает родительский метод, что делает решение достаточно переносимым.
И, в то время как бэкэнд-модель используется независимо от сохранения через save()
или же saveAttribute()
это обеспечит обработку всех сохранений через бэкэнд администратора в соответствии с вашей логикой.
Один из самых простых способов, который я могу придумать, - это добавить пользовательский файл Javascript на страницу добавления продукта и проверить, существует ли идентификатор продукта, который доступен только после сохранения продукта. Если идентификатор продукта присутствует, отключите / скройте поле sku. Это не на 100% безопасно, так как вы используете только JS, но при условии, что вы можете доверять администраторам.