Magento只读和隐藏的产品属性

时间:2011-06-17 09:55:50

标签: magento attributes hidden readonly

我希望有一些Magento产品属性不能从管理界面编辑,有些在该界面中根本看不到(作为存储一些不应被人类查看的产品的持久性信息的方法用户..这是我能想到的唯一方法,欢迎任何其他建议。

所以我的问题是:所有Magento属性都必须从管理界面可见和可编辑吗?如果没有,它们如何变为只读或隐藏?

我注意到在管理界面中有一些只读字段,因此必须以这种或那种方式执行此操作。在搜索了stackoverflow之后,我发现了一个涉及JavaScript的可能解决方案,但是如果可能的话,我不想走这条路。

7 个答案:

答案 0 :(得分:15)

好的,看起来毕竟可以做到。添加catalog_product_load_after事件的观察者后,lockAttribute类的Mage_Catalog_Model_Abstract方法可用于将产品属性设置为只读。以下是观察者方法的代码:

public function lockAttributes($observer) {
    $event = $observer->getEvent();
    $product = $event->getProduct();
    $product->lockAttribute('attribute_code');
}

答案 1 :(得分:12)

由于为每个产品加载调度catalog_product_load_after事件,因此lock_attributes方法中提供的属性在每次产品加载后都会被锁定。这可能会产生意外结果:如果没有明确解锁它们,就无法更改lock_attributes方法中属性的值。

不是使用catalog_product_load_after事件,而是为catalog_product_edit_action事件添加观察者就足够了:只有在管理界面中编辑产品时才会调度此事件。

答案 2 :(得分:2)

我认为Aad Mathijssen和Epicurus合起来对这个问题有最好的答案,稍作澄清。正如Aad所指出的那样,catalog_product_load_after在每次产品加载后调用,这意味着前端上的

如果我们要在管理面板中保护属性字段,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>

答案 3 :(得分:1)

不,我猜它不可能来自属性管理器。 一个简单快捷的解决方案是使用css来隐藏输入和标签。

答案 4 :(得分:1)

我已经开发出了适用于产品,类别和CMS页面的扩展程序。您只需定义一些规则并选择要显示为只读的属性。

Magento Admin Read-Only Product Rules

扩展程序网址:https://www.bubbleshop.net/magento-admin-readonly.html

答案 5 :(得分:0)

使用这个线程和更多的挖掘; lockAttribute方法来自一个抽象类,这意味着它也可以用于类别属性。我抓住了'catalog_category_load_after'观察者并用它来锁定我想要的类别属性:

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

我不确定这是否是正确的观察者,但它有效。

所以是的,可以锁定类别属性或使它们只读。

答案 6 :(得分:0)

etc \ adminhtml \ events.xml

    <?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="catalog_product_load_after">
      <observer name="product_lock_attributes" instance="Vendor\Module\Observer\Lock"/>
    </event>
</config>

Observer \ Lock.php

namespace Vendor\Module\Observer;
 
class Lock implements \Magento\Framework\Event\ObserverInterface
{
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $event = $observer->getEvent();
        $product = $event->getProduct();
        $product->lockAttribute('attribute_code');
     }
}