Magento только для чтения и скрытые атрибуты продукта
Я хотел бы иметь некоторые атрибуты продукта Magento, которые не редактируются из интерфейса администратора, и некоторые, которые вообще не видны в этом интерфейсе (как метод хранения некоторой постоянной информации о продукте, который не должен рассматриваться человеком пользователи.. это единственный способ сделать это, о котором я могу думать, любые другие предложения приветствуются).
Итак, мой вопрос: все атрибуты Magento должны быть видимыми и редактируемыми из интерфейса администратора? Если нет, то как они могут быть сделаны только для чтения или скрыты?
Я заметил, что в интерфейсе администратора есть несколько полей только для чтения, поэтому это должно быть возможно сделать так или иначе. После поиска stackoverflow для этого я нашел возможное решение, включающее JavaScript, но я бы не хотел идти по этому пути, если это вообще возможно.
Ответы
Ответ 1
ОК, похоже, что это можно сделать в конце концов. После добавления наблюдателя для события catalog_product_load_after
метод lockAttribute
класса Mage_Catalog_Model_Abstract
может использоваться, чтобы атрибут продукта доступен только для чтения. Вот код для метода наблюдателя:
public function lockAttributes($observer) {
$event = $observer->getEvent();
$product = $event->getProduct();
$product->lockAttribute('attribute_code');
}
Ответ 2
Поскольку событие catalog_product_load_after
отправляется для каждой загрузки продукта, атрибуты, входящие в метод lock_attributes
, блокируются после каждой загрузки продукта. Это может иметь неожиданные результаты: невозможно изменить значение атрибутов в методе lock_attributes
, не открывая их явно.
Вместо использования события catalog_product_load_after
достаточно добавить наблюдателя для события catalog_product_edit_action
: это событие отправляется только при редактировании продукта в интерфейсе администратора.
Ответ 3
Я думаю, что Аад Матисссен и Эпикур вместе взяли лучший ответ на этот вопрос, с небольшим разъяснением. Как указывает Аад, catalog_product_load_after
вызывается после каждой загрузки продукта, а также на FrontEnd!
Если мы пытаемся защитить поля атрибутов только в панелях администратора, catalog_product_edit_action
является более подходящим выбором.
Теперь ваш etc/config.xml
будет примерно таким:
<catalog_product_edit_action>
<observers>
<lock_attributes>
<class>yourmodule/observers</class>
<method>lockAttributes</method>
</lock_attributes>
</observers>
</catalog_product_edit_action>
Ответ 4
Нет, я думаю, что это невозможно из диспетчера атрибутов.
Легким быстрым и грязным решением было бы использовать css, чтобы скрыть ввод и метку.
Ответ 5
Я разработал именно такое расширение, которое работает для продуктов, категорий и страниц CMS. Вам просто нужно определить некоторые правила и выбрать, какие атрибуты вы хотите показывать только для чтения.
![Правила продукта только для чтения Magento Admin]()
URL расширения: https://www.bubbleshop.net/magento-admin-readonly.html
Ответ 6
Использование этой нити и еще нескольких копаний; метод lockAttribute относится к абстрактному классу, что означает, что его можно также использовать и в атрибутах категории. Я поймал наблюдателя 'catalog_category_load_after' и использовал его для блокировки моих желаемых атрибутов категории:
public function lockCategoryAttributes($observer) {
$event = $observer->getEvent();
$c = $event->getCategory();
$c->lockAttribute('attribute_code');
}
Я не уверен, что это правильный наблюдатель, но он работает.
Итак, да, можно заблокировать атрибуты категории или сделать их только для чтения.