首页>Magento>source

我想创建一个只读属性,但它看起来不可能。

我试图传递给addAttribute() 'disabled' =>true   或者 'readonly' => true   没有任何成功。 我发现了一些关于使用 setLockedAttributes()的建议   但由于某种原因,它无法正常工作

Reference: 点击 Varien_Data_Form_Element_Abstract::serialize($attributes = array(), $valueSeparator='=', $fieldSeparator=' ', $quote='"')

最新回答
  • 2019-12-5
    1 #

    从引用的SO文章 - 我尝试过,这确实适用于1.6CE和1.7CE / 1.12EE.我还没有尝试过1.8 / 1.13。

    https://stackoverflow.com/questions/6384120/magento-read-only-and-hidden-product-attributes

    OK, it looks like it can be done after all. After adding an observer for the catalog_product_load_after   事件, lockAttribute   的方法    Mage_Catalog_Model_Abstract   类可用于制作产品    属性只读.以下是观察者方法的代码:

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

  • 2019-12-5
    2 #

    如果您在产品管理中无法编辑它,请使用前端输入类型 label ,用纯文本替换表单输入:

    addAttribute($entity, $code, array(
        ...
        'input' => 'label',
        ...
    ));
    

    请注意,这不会阻止通过API或操纵的POST请求保存属性.为了使其安全,另外使用 lockAttribute()   如上所述。

    此外,它只适用于文本类型属性,对于其他类型,再次回归到 lockAttributes   或者扩展"标签"类型。

  • 2019-12-5
    3 #

    要修复此问题,您也可以使用输入渲染器。 缺点是,您必须为每种输入类型执行此操作,并通过每个属性的设置进行设置。

    为此,请使用 input_renderer   使用addAttribute属性或 frontend_input_renderer时的键   使用updateAttribute时。 例如:

    $installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'yourattribute', array(
    // ...
    // won't be used actually as you use a custom renderer (constant equals to text), but I'm not sure what omitting this will have as effect..
        'input' => Mage_Catalog_Model_Product_Option::OPTION_GROUP_TEXT,
        'input_renderer' => 'yourns_yourmodule/adminhtml_product_helper_form_disabledText',
        'frontend_class' => 'disabled',
        'note' => 'This field is disabled',
    // ...
    ));
    

    然后和你的班级 Yourns_Yourmodule_Block_Adminhtml_Product_Helper_Form_DisabledText   扩展您实际使用的输入类.对于文本字段,它将是 Varien_Data_Form_Element_Text . 对于选择它将是 Varien_Data_Form_Element_Select   等等。

    现在添加这样的代码来禁用属性,覆盖 getHtml   方法,设置属性并返回输入字段的实际HTML代码:

    public function getHtml()
    {
        // Set disabled
        $this->setReadonly(true, true);
        return parent::getHtml();
    }
    

    该方法可以在lib / Varien / Data / Form / Abstract.php中找到,它将由所有表单输入元素字段继承,因此它应该可用。

    /**
     * Disable elements
     *
     * @param boolean $readonly
     * @param boolean $useDisabled
     * @return Varien_Data_Form_Abstract
     */
    public function setReadonly($readonly, $useDisabled = false)
    {
        if ($useDisabled) {
            $this->setDisabled($readonly);
            $this->setData('readonly_disabled', $readonly);
        } else {
            $this->setData('readonly', $readonly);
        }
        foreach ($this->getElements() as $element) {
            $element->setReadonly($readonly, $useDisabled);
        }
        return $this;
    }
    

    在如上所示的属性设置中包含禁用的类可能会显示拒绝输入的可能性。 你也可以使用 $this->addClass('disabled')   在方法中,我还没有尝试过。

  • magento2:我需要在magento 2中按子类别进行产品收集
  • magento2:Magento 2 Uncaught TypeError:无法读取属性' quoteData' 未定义的