Magento 2: Programowo dodaj atrybut produktu

Odpowiedzi:

34

Omówienie programowego dodawania atrybutu produktu

  • Krok 1: Utwórz plik InstallData.php
  • Krok 2: Zdefiniuj install() metodę
  • Krok 3: Utwórz niestandardowy atrybut

Krok 1: Utwórz plikInstallData.php

Zaczniemy od klasy InstallData, która znajduje się w

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

Zawartość tego pliku:

<?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;
    }

}

Krok 2: Zdefiniuj metodę install ()

<?php

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

}

Krok 3: Utwórz niestandardowy atrybut Oto kod wszystkich wierszy, InstallData.phpaby programowo utworzyć atrybut produktu.

<?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' => ''
            ]
        );
    }
}

Jak widać, wszystkie metody addAttribute wymagają: Identyfikator typu encji, do której chcemy dodać atrybut Nazwa atrybutu Tablica par kluczowych wartości do zdefiniowania atrybutu, takiego jak grupa, typ danych wejściowych, źródło, etykieta…

Wszystko gotowe, uruchom skrypt aktualizacji php bin / magento setup: upgrade, aby zainstalować moduł, a atrybut produktu sample_attribute zostanie utworzony.

Jeśli chcesz usunąć atrybut produktu, możesz użyć metody removeAttribute zamiast addAttribute. Będzie tak:

EDYTOWAĆ:

w celu odinstalowania utwórz aplikację / code / 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');
    }
}

Możesz również śledzić poniższy adres URL, aby utworzyć niestandardowy atrybut produktu.

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

Prakash Patel
źródło
Chcę utworzyć atrybut przesyłania pliku. Jakie zmiany muszę zrobić? uprzejmy przewodnik
efemeryczny
@ efemeryczny możesz zmienić wartość „input” => '', możesz ją przeczytać tutaj: magento.stackexchange.com/a/116829/2694
Andhi Irawan
Muszę zastąpić „int”? na ten link nie znalazłem do przesłania pliku :(
efemeryczne
Jako specjalną wskazówkę, nie pozwól, aby pole „input” => „” było puste. Spowoduje to błąd. magento.stackexchange.com/questions/204420/…
ZFNerd
cześć @Prakash Patel, bez instalatora możemy stworzyć atrybut produktu?
jafar pinjar