我希望有一些Magento产品属性不能从管理界面编辑,有些在该界面中根本看不到(作为存储一些不应被人类查看的产品的持久性信息的方法用户..这是我能想到的唯一方法,欢迎任何其他建议。
所以我的问题是:所有Magento属性都必须从管理界面可见和可编辑吗?如果没有,它们如何变为只读或隐藏?
我注意到在管理界面中有一些只读字段,因此必须以这种或那种方式执行此操作。在搜索了stackoverflow之后,我发现了一个涉及JavaScript的可能解决方案,但是如果可能的话,我不想走这条路。
答案 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页面的扩展程序。您只需定义一些规则并选择要显示为只读的属性。
扩展程序网址: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');
}
}