Скрыть атрибуты и другие поля в бэкенде редактирования продукта

10

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

Это означает: скрытие некоторых атрибутов, а также вкладок, таких как «отзывы клиентов», «перекрестные продажи» и т. Д.

Как это может быть сделано?

Alex
источник

Ответы:

10

Установите is_visibleдля 0атрибута значение, и оно не будет отображаться в административных формах (страница продукта, а также страница управления атрибутом).

Вы можете сделать это с помощью инструмента SQL или программно в скрипте установки:

$installer->updateAttribute('catalog_product', $attribute_code, 'is_visible', '0');
Бен Лессани - Сонасси
источник
Знаете ли вы, если пустые вкладки исчезнут автоматически? И есть ли способ сделать эти атрибуты временно видимыми для администраторов? В любом случае - это все равно будет хорошей отправной точкой для модуля, делающего их видимыми для каждого пользователя.
Алекс
1
Вы можете расширить это - и добавить свои собственные списки ACL, чтобы определить, кто может / не может их редактировать
Бен Лессани - Sonassi
Я только что понял, что есть намного больше вещей, чем только атрибуты :-) Отредактировал заголовок моего вопроса, чтобы сделать это более ясным.
Алекс
Я думаю, что вкладки исчезают, если они пусты. Чтобы показать их, просто добавьте двух наблюдателей, чтобы показать их перед запросом и скрыть их после? Лучшая идея, которая у меня есть на данный момент. И не безотказно, когда два человека находятся в магазине параллельно. Альтернатива: наблюдать и изменять запрос коллекции. но тогда, я думаю, у Вас будет очень много ...
Фабиан Блехшмидт
Они на самом деле не исчезают - и я говорю о вкладках, которые не относятся к атрибутам (перекрестные продажи и т. Д.)
Алекс
8

Это возможно при наблюдении за событиями core_block_abstract_prepare_layout_before(метод removeAttributes()) и core_block_abstract_prepare_layout_after(метод removeTabs()).

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

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

/**
 * Overwrite the cache field in the product to remove disabled attributes
 *
 * event: core_block_abstract_prepare_layout_before
 *
 * @param Varien_Event_Observer $event
 */
public function removeAttributes(Varien_Event_Observer $event)
{
    $block = $event->getBlock();
    if (!$block instanceof Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs) {
        return;
    }

    $editableAttributes = $block->getProduct()->getTypeInstance()->getEditableAttributes();
    $adminSession = Mage::getSingleton('admin/session');


    // TODO: remove attribute to hide from the $editableAttributes array

   $block->getProduct()->setData('_cache_editable_attributes', $editableAttributes);
}

/**
 * Remove hidden tabs from product edit
 * event: core_block_abstract_prepare_layout_after
 *
 * @param Varien_Event_Observer $event
 */
public function removeTabs(Varien_Event_Observer $event)
{
    $block = $event->getBlock();
    if (!$block instanceof Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs) {
        return;
    }

    // TODO / Example: remove inventory tab
    $block->removeTab('inventory'); 

    // fix tab selection, as we might have removed the active tab
    $tabs = $block->getTabsIds();

    if (count($tabs) == 0) {
        $block->setActiveTab(null);
    } else {
        $block->setActiveTab($tabs[0]);
    }
}
Alex
источник
Вы когда-нибудь получали с модулем настройки ACL? Проблема в том, что у меня есть сотни наборов атрибутов. Как это применимо, так как теперь будут сотни вкладок «Группы».
Энтони Чичелли
да, это работает в проекте нас
Алекс
У вас есть GIT? Мы просто работаем над тем же проектом. Просто вижу разные стратегии. Если нет, я дам вам знать, когда я закончу, как это должно быть в ближайшее время.
Энтони Чичелли
Мы только что создали расширение, чтобы позволить это. Он также использует все функциональные возможности модуля доступа Aitoc. Таким образом, вы получите отличное сочетание обоих.
Энтони Чичелли
Ох, интересно. Я не люблю Aitoc, хотя ... вы публикуете свой модуль? Наше еще не опубликовано,
Алекс
0

Относительно простой способ скрыть вкладки - просто создать нового пользователя-администратора и предоставить доступ только к тем областям, которые будет использовать владелец магазина. Для владельца магазина все будет просто, но вы или другой разработчик сможете вносить изменения.

andyjv
источник
Конечно, это работает для общих областей (пункты меню и т. Д.), Но только для очень немногих вкладок на экране редактирования продукта (отзывы могут быть отключены таким образом). Отдельные атрибуты нельзя отключить.
Алекс