在产品编辑后端中隐藏属性和其他字段


10

为了让商店所有者更容易地编辑产品(可能还包括类别),我们希望在管理后端中向某些用户隐藏一些不必要的标签和字段。

这意味着:隐藏一些属性,但也隐藏诸如“客户评论”,“交叉销售”等标签。

如何才能做到这一点?

Answers:


10

在属性上设置is_visible0,它将不会显示在管理表单(产品页面以及属性管理页面)中。

您可以通过SQL工具或在安装脚本中以编程方式进行操作:

$installer->updateAttribute('catalog_product', $attribute_code, 'is_visible', '0');

您知道空白标签是否会自动消失吗?有没有办法使这些属性对于管理员来说暂时可见?无论如何,这仍然是一个使模块按用户可见的良好起点。
亚历克斯

1
你可以扩展这个 - ,并把自己的ACL来决定谁可以/不能编辑它
奔Lessani - Sonassi

我只是意识到,除了属性以外,还有很多其他事情:-)编辑了我的问题的标题,以使内容更加清楚。
亚历克斯

我认为如果标签为空,标签就会消失。要显示它们,只需添加两个观察者以在请求之前显示它们,然后在它们之后隐藏它们?我目前有个最好的主意。当两个人在商店并行时,这不是故障预防。备选方案:观察者并更改集合查询。但是我想您会拥有很多……
Fabian Blechschmidt

它们实际上并没有消失-我说的是与属性无关的标签(交叉销售等)
Alex,

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

您是否曾经使用ACL设置模块获得了成功?我遇到的麻烦是我有数百个属性集。现在将有数百个“组”选项卡,这将如何应用。
Anthony Cicchelli

是的,它正在我们的项目中运行
Alex

你有GIT吗?我们只是在同一个项目上工作。只是看到不同的策略。如果没有,我会尽快通知您。
Anthony Cicchelli'3

我们只是构建了一个扩展来允许这样做。它还使用Aitoc权限模块的全部功能。因此,您将两者完美地结合在一起。
Anthony Cicchelli '16

真有趣 虽然我不喜欢Aitoc ...您是否发布模块?我们的尚未出版,...
Alex

0

隐藏标签的一种相对简单的方法是仅创建一个新的Admin用户,并仅授予对商店所有者将使用的区域的访问权限。这将使商店老板的事情变得简单,同时仍使您或其他开发人员可以进行更改。


当然-适用于一般区域(菜单条目等),但仅适用于产品编辑屏幕中的极少数选项卡(这样可以禁用查看功能)。不能禁用单个属性。
亚历克斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.