Magento только для чтения и скрытые атрибуты продукта - PullRequest
15 голосов
/ 17 июня 2011

Я хотел бы иметь некоторые атрибуты продукта Magento, которые нельзя редактировать из интерфейса администратора, и некоторые атрибуты, которые вообще не видны в этом интерфейсе (в качестве метода хранения некоторой постоянной информации о продукте, которую не должен просматривать человек пользователи ... это единственный способ сделать это, о котором я могу думать, любые другие предложения приветствуются).

Итак, мой вопрос: все ли атрибуты Magento должны быть видимыми и редактируемыми из интерфейса администратора? Если нет, то как их можно сделать доступными только для чтения или скрытыми?

Я заметил, что в интерфейсе администратора есть некоторые поля только для чтения, поэтому должна быть возможность сделать это так или иначе. После поиска stackoverflow для этого я нашел возможное решение с использованием JavaScript, но я бы не хотел идти по этому пути, если это вообще возможно.

Ответы [ 6 ]

15 голосов
/ 22 июня 2011

ОК, похоже, это можно сделать в конце концов. После добавления наблюдателя для события catalog_product_load_after метод lockAttribute класса Mage_Catalog_Model_Abstract может использоваться для того, чтобы сделать атрибут продукта доступным только для чтения. Вот код для метода наблюдателя:

public function lockAttributes($observer) {
    $event = $observer->getEvent();
    $product = $event->getProduct();
    $product->lockAttribute('attribute_code');
}
12 голосов
/ 24 октября 2011

Поскольку событие catalog_product_load_after отправляется для при каждой загрузке продукта , атрибуты, предоставленные в методе lock_attributes, блокируются после каждой загрузки продукта.Это может привести к неожиданным результатам: невозможно изменить значение атрибутов в методе lock_attributes без явной их разблокировки.

Вместо использования события catalog_product_load_after достаточно добавить наблюдателя длясобытие catalog_product_edit_action: это событие отправляется только при редактировании продукта в интерфейсе администратора.

2 голосов
/ 06 мая 2014

Я думаю, что Aad Mathijssen и Epicurus вместе имеют лучший ответ на вопрос с небольшим уточнением.Как указывает Аад, catalog_product_load_after вызывается после каждой загрузки продукта, а это означает и во FrontEnd !

Если мы хотим защитить поля атрибутов * только 1006 * в админ-панелях 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>
1 голос
/ 21 августа 2015

Я разработал именно такое расширение, которое работает для продуктов, категорий и страниц CMS.Вам просто нужно определить некоторые правила и выбрать, какие атрибуты вы хотите показывать только для чтения.

Magento Admin Read-Only Product Rules

Дополнительный URL: https://www.bubbleshop.net/magento-admin-readonly.html

1 голос
/ 17 июня 2011

Нет, я думаю, это невозможно из менеджера атрибутов.Простое, быстрое и грязное решение - использовать css, чтобы скрыть ввод и метку.

0 голосов
/ 01 августа 2012

Использование этой темы и еще немного копания;метод lockAttribute происходит из абстрактного класса, что означает, что его также можно использовать для атрибутов категории.Я поймал наблюдателя catalog_category_load_after и использовал его для блокировки атрибутов моей желаемой категории:

public function lockCategoryAttributes($observer) {
    $event = $observer->getEvent();
    $c = $event->getCategory();
    $c->lockAttribute('attribute_code');
}

Я не уверен, что это именно тот наблюдатель, которого нужно использовать, но он работает.

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

...