将自定义属性添加到magento属性并在前端显示

3htmauhk  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(150)

我已经开始使用magento作为我的电子商务cms,我知道这是一个非常强大的平台。最近我遇到了它的功能,帮助开发人员扩展核心,我已经设法添加自定义类别选项。有没有机会达到同样的结果对一个属性?我想添加一个文本描述的属性标签,并显示在前端?

dba5bblo

dba5bblo1#

这可以通过编写自定义模块来实现。我这样做是为了给属性添加一个工具提示选项。
您可以使用adminhtml_catalog_product_attribute_edit_prepare_form-事件添加一个带有观察者的字段:

$fieldset = $observer->getForm()->getElement('base_fieldset');
$fieldset->addField('tooltip', 'text', array(
    'name' => 'tooltip',
    'label' => Mage::helper('catalog')->__('Tooltip'),
    'title' => Mage::helper('catalog')->__('Tooltip')
));

这会在属性编辑屏幕中添加额外的字段。下一步是确保在编辑属性时保存属性。这可以在安装程序脚本中通过以下命令来完成:

$installer->getConnection()->addColumn(
    $installer->getTable('catalog/eav_attribute'),
    'tooltip',
    array(
        'type'      => Varien_Db_Ddl_Table::TYPE_TEXT,
        'nullable'  => true,
        'comment'   => 'Tooltip'
    )
);

您还必须确保您的Model/Resource/Setup-类扩展Mage_Eav_Model_Entity_Setup而不是Mage_Core_Model_Resource_Setup
现在,你可以保存你的自定义属性了。下一步是在前端显示它。这可以很容易地完成,只需要简单的Magento模板101:
例如,在foreach()-循环中的catalog/product/view/type/options/configurable.phtml中,放置如下内容,以显示工具提示:

echo $_attribute->getProductAttribute()->getTooltip();

那很好...

**更新:**由于我通过电子邮件收到了一些关于这个主题的问题,我决定写一篇关于这个主题的更详细的博客文章。你可以在这里阅读:http://gielberkers.com/add-custom-properties-magento-attributes/

dphi5xsq

dphi5xsq2#

对于Magento 2(为产品属性添加简单的是/否属性)。
可使用ui_component“product_attribute_add_form.xml”(示例可在供应商模块中找到)

  • 或如果它不工作 *:

1.创建一个新的模块Vendor_ModuleName。扩展“catalog_eav_attribute”并在Vendor/ModuleName/etc/db_schema.xml中添加新列(不要忘记生成db_schema_whitelist. json)

<?xml version="1.0"?>
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
    <table name="catalog_eav_attribute">
        <column xsi:type="smallint" name="new_column" padding="6" unsigned="false" nullable="false"
                identity="false" default="0" comment="Comment for new_column"/>
    </table>
</schema>

1.订阅供应商/模块名称/etc/adminhtml/events.xml中的事件“product_attribute_form_build_main_tab”-如果要将新属性放在主选项卡(base_fieldset)中“product_attribute_form_build”-如果要将新属性放在高级选项卡(advanced_fieldset)中

<?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="product_attribute_form_build">
        <observer
            name="vendor_modulename_observer_backend_product_attributeformbuild"
            instance="Vendor\ModuleName\Observer\Backend\Product\AttributeFormBuild"/>
    </event>
</config>

1.创建一个观察器供应商/模块名称/观察器/后端/产品/AttributeFormBuild. php

<?php
declare(strict_types=1);

namespace Vendor\ModuleName\Observer\Backend\Product;

use Magento\Framework\Module\Manager;
use Magento\Config\Model\Config\Source\Yesno;

class AttributeFormBuild implements \Magento\Framework\Event\ObserverInterface
{
    protected Yesno $yesNo;
    protected $moduleManager;

    /**
     * @param Manager $moduleManager
     * @param Yesno $yesNo
     */
    public function __construct(
        Manager $moduleManager,
        Yesno $yesNo
    )
    {
        $this->moduleManager = $moduleManager;
        $this->yesNo = $yesNo;
    }

    /**
     * @param \Magento\Framework\Event\Observer $observer
     * @return void
     */
    public function execute(
        \Magento\Framework\Event\Observer $observer
    ) {
        if (!$this->moduleManager->isEnabled('Vendor_ModuleName')) {
            return;
        }

        $form = $observer->getForm();

//        $fieldset = $form->getElement('base_fieldset');

        $fieldset = $form->getElement('advanced_fieldset');
        $yesnoSource = $this->yesNo->toOptionArray();
        $fieldset->addField(
            'new_column',
            'select',
            [
                'name' => 'new_column',
                'label' => __('New column label'),
                'title' => __('New column title'),
                'note' => __('Use this attribute for something'),
                'values' => $yesnoSource,
                'required' => false,
            ],
            'is_filterable'
        );
    }
}

相关问题