Saya mencoba menambahkan opsi untuk atribut ukuran dan warna dalam modul importir saya, tetapi saya tidak tahu caranya ...:
private function addOption($attributeCode, $value)
{
$ob = $this->_objectManager;
/* @var $m \Magento\Eav\Model\Entity\Attribute\OptionManagement */
$m = $this->optionManagement;
/* @var $option \Magento\Eav\Model\Entity\Attribute\Option */
$option = $this->attributeOption;
$option->setLabel($value);
$option->setValue($value);
$m->add(\Magento\Catalog\Api\Data\ProductAttributeInterface::ENTITY_TYPE_CODE,
$attributeCode,
$option);
Ini melaporkan kesalahan (Saya memodifikasi pengecualian melaporkan OptionMaganger.php
ke pesan Pengecualian-> )
Tidak dapat menyimpan ukuran atribut Pemberitahuan: Indeks tidak terdefinisi: hapus di /var/www/html/magento2/vendor/magento/module-swatches/Model/Plugin/EavAttribute.php on line 177
- Manajemen dan Opsi Option berasal
_contstructor
- Dengan OptionManagement, saya dapat mengambil item yang ada, jadi seharusnya ok ..
setLabel()
dan setValue()
default, tetapi saya mencoba setData , memuat contoh opsi dan lewat OptionManagement->getItems
untuk menambahkan (...) "lagi", tetapi kesalahan masih ada ...
Ada ide, bagaimana saya bisa menambahkan Opsi EAV (swatch?) Selama proses impor? (tidak dalam pengaturan modul)
Perbarui:
Cara lain saya dapat menambahkan opsi:
$attributeCode = 137; /* on size, 90 on color ... */
$languageValues[0]='Admin Label';
$languageValues[1]='Default Store Label - XXXXL';
$ob = $this->_objectManager;
private function addOption($attributeCode,$languageValues){
$ob = $this->_objectManager;
/* @var $attr \Magento\Eav\Model\Entity\Attribute */
$attr = $ob->create('\Magento\Eav\Model\Entity\Attribute');
$attr->load($attributeCode);
$option = [];
$option['value'][$languageValues[0]] = $languageValues;
$attr->addData(array('option' => $option));
$attr->save();
}
Dengan cara ini Magento2 dapat menyimpan opsi untuk atribut, tapi saya tidak tahu apa itu cara "resmi" :)
sumber
Jawaban:
menyatakan:
konstruktor:
jalankan metode:
sumber
Cara lain saya dapat menambahkan opsi:
Dengan cara ini Magento2 dapat menyimpan opsi untuk atribut, tapi saya tidak tahu apa itu cara "resmi".
sumber
Tampaknya menjadi masalah validasi. Kunci hapus dalam data berasal dari formulir di backend, jadi cobalah menambahkan kunci hapus kosong dengan cara itu:
$option->setData('delete','');
Itu bisa bekerja.
sumber
Saya akhirnya menulis ulang seluruh jawaban ini menggunakan metode ObjectFactory yang disarankan oleh Ryan H.
Akhirnya menjadi Kelas Penolong yang memanfaatkan beberapa atribut yang saya buat pada objek pelanggan, tetapi idenya ada pada bagaimana memanfaatkan EAV + ObjectFactories untuk memanipulasi opsi atribut
sumber
UPDATE 2016-09-11: Seperti yang ditunjukkan quickshiftin, solusi ini tidak berfungsi untuk M2.1 +. Mencoba ketergantungan-menyuntikkan
CategorySetup
kelas di luar pengaturan akan memberi Anda kesalahan fatal. Lihat di sini untuk solusi yang lebih kuat: /magento//a/103951/1905Gunakan
\Magento\Catalog\Setup\CategorySetup
kelas untuk ini. Ini termasukaddAttributeOption()
metode, yang bekerja dengan cara yang persis sama sepertieav/entity_setup::addAttributeOption()
pada 1.x. Ada beberapa metode atribut lain di sana yang mungkin bisa membantu juga.Anda dapat menggunakan injeksi dependensi untuk mendapatkan kelas ini kapan saja, bahkan di luar proses pengaturan.
Secara khusus:
Jika diinginkan, Anda bisa menghilangkan
attributeRepository
kelas dan menggunakannyagetAttribute()
langsungcategorySetup
. Anda hanya perlu memasukkan ID jenis entitas setiap kali.sumber
CategorySetupFactory
instantiateCategorySetup
dariConsole\Command
, namun ketika saya sebut$factory->setup()
kesalahan fatal terjadi:PHP Fatal error: Uncaught TypeError: Argument 1 passed to Magento\Setup\Module\DataSetup::__construct() must be an instance of Magento\Framework\Module\Setup\Context, instance of Magento\Framework\ObjectManager\ObjectManager given
Magento 2 menambahkan opsi atribut khusus, Nilai secara terprogram.
Jalankan Script ini di direktori root magento setelah url.
sumber