Magento 2: Agregar atributo de producto mediante programación

Respuestas:

34

Descripción general de la adición de atributos de producto mediante programación

  • Paso 1: crear archivo InstallData.php
  • Paso 2: definir el install() método
  • Paso 3: crea un atributo personalizado

Paso 1: crear archivoInstallData.php

Comenzaremos con la clase InstallData que se encuentra en

app/code/Mageplaza/HelloWorld/Setup/InstallData.php. 

El contenido de este archivo:

<?php
namespace Mageplaza\HelloWorld\Setup;

use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface
{
    private $eavSetupFactory;

    public function __construct(EavSetupFactory $eavSetupFactory)
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

}

Paso 2: defina el método install ()

<?php

public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{

}

Paso 3: Crear atributo personalizado Aquí están todas las líneas de código InstallData.phppara crear un atributo de producto mediante programación.

<?php
namespace Mageplaza\HelloWorld\Setup;

use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface
{
    private $eavSetupFactory;

    public function __construct(EavSetupFactory $eavSetupFactory)
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
        $eavSetup->addAttribute(
            \Magento\Catalog\Model\Product::ENTITY,
            'sample_attribute',
            [
                'type' => 'int',
                'backend' => '',
                'frontend' => '',
                'label' => 'Sample Atrribute',
                'input' => '',
                'class' => '',
                'source' => '',
                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                'visible' => true,
                'required' => true,
                'user_defined' => false,
                'default' => '',
                'searchable' => false,
                'filterable' => false,
                'comparable' => false,
                'visible_on_front' => false,
                'used_in_product_listing' => true,
                'unique' => false,
                'apply_to' => ''
            ]
        );
    }
}

Como puede ver, todo lo que requiere el método addAttribute es: La identificación de tipo de la entidad a la que queremos agregar el atributo El nombre del atributo Una matriz de pares de valores clave para definir el atributo, como grupo, tipo de entrada, fuente, etiqueta ...

Todo listo, ejecute el script de actualización php bin / magento setup: actualice para instalar el módulo y se creará el atributo de producto sample_attribute.

Si desea eliminar el atributo del producto, puede usar el método removeAttribute en lugar de addAttribute. Será así:

EDITAR:

para desinstalar, cree la aplicación / código / Mageplaza / HelloWorld / Setup / Uninstall.php.

<?php
namespace Mageplaza\HelloWorld\Setup;

use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\UninstallInterface;

class Uninstall implements UninstallInterface
{
    private $eavSetupFactory;

    public function __construct(EavSetupFactory $eavSetupFactory)
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

    public function uninstall(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
        $eavSetup->removeAttribute(
            \Magento\Catalog\Model\Product::ENTITY,
            'sample_attribute');
    }
}

También puede seguir la siguiente URL para crear un atributo de producto personalizado.

URL: https://www.mageplaza.com/magento-2-module-development/magento-2-add-product-attribute-programmatic.html

Prakash Patel
fuente
Quiero crear un atributo de carga de archivos. ¿Qué cambios tengo que hacer? guía amable
efímera
@ephemeral puede cambiar el valor de 'input' => '', puede leerlo aquí: magento.stackexchange.com/a/116829/2694
Andhi Irawan
Tengo que reemplazar 'int' con? en este enlace no encontré para cargar archivos :(
efímero
Como pista especial, no deje el campo 'input' => '' en blanco. Efectuará un error. magento.stackexchange.com/questions/204420/…
ZFNerd
hola @Prakash Patel, sin instalador, ¿podemos crear un atributo de producto?
jafar pinjar