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');
}

Я не уверен, что это правильный наблюдатель, но он работает.

Итак, да, можно заблокировать атрибуты категории или сделать их только для чтения.