J'essaie d'ajouter des options pour les attributs de taille et de couleur dans mon module d'importateur mais je ne sais pas comment ...:
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);
Ce rapport d'erreur (je modifié exception des rapports sur OptionMaganger.php
la exception-> Message )
Impossible d'enregistrer la taille de l'attribut Remarque: index non défini: supprimer dans /var/www/html/magento2/vendor/magento/module-swatches/Model/Plugin/EavAttribute.php à la ligne 177
- L'OptionManagement et l'Option proviennent de
_contstructor
- Avec OptionManagement, je peux récupérer les éléments existants, donc ça devrait aller.
setLabel()
et setValue()
sont par défaut, mais j'ai essayé setData , charger une instance d'option et passer OptionManagement->getItems
pour ajouter (...) "encore", mais l'erreur existe toujours ...
Une idée, comment puis-je ajouter des options EAV (échantillons?) Pendant le processus d'importation? (pas dans la configuration du module)
Mise à jour :
Autre moyen, je peux ajouter une option:
$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();
}
De cette façon, Magento2 peut enregistrer une option à attribuer, mais je ne sais pas quelle est la manière "officielle" :)
la source
Réponses:
déclarer:
constructeur:
exécuter la méthode:
la source
Autre moyen, je peux ajouter une option:
De cette façon, Magento2 peut enregistrer une option à attribuer, mais je ne sais pas quelle est la manière "officielle".
la source
Semble être un problème de validation. La clé de suppression dans les données provient du formulaire dans le backend, essayez donc d'ajouter une clé de suppression vide de cette façon:
$option->setData('delete','');
Ça pourrait marcher.
la source
J'ai fini par réécrire toute cette réponse en utilisant les méthodes ObjectFactory suggérées par Ryan H.
Cela a fini par être une classe d'assistance qui utilisait certains attributs que j'ai créés sur l'objet client, mais l'idée est là sur la façon d'utiliser EAV + ObjectFactories pour manipuler les options d'attribut
la source
MISE À JOUR 2016-09-11: Comme l'a souligné quickshiftin, cette solution ne fonctionne pas pour M2.1 +. Une tentative d'injection de dépendance de la
CategorySetup
classe en dehors de l'installation vous donnera une erreur fatale. Voir ici pour une solution plus robuste: /magento//a/103951/1905Utilisez la
\Magento\Catalog\Setup\CategorySetup
classe pour cela. Il comprend uneaddAttributeOption()
méthode, qui fonctionne exactement de la même manière queeav/entity_setup::addAttributeOption()
dans 1.x. Il existe d'autres méthodes d'attribut qui pourraient également être utiles.Vous pouvez utiliser l'injection de dépendances pour obtenir cette classe à tout moment, même en dehors d'un processus d'installation.
Plus précisément:
Si vous le souhaitez, vous pouvez éliminer la
attributeRepository
classe et l'utilisergetAttribute()
directementcategorySetup
. Il vous suffirait d'inclure l'ID de type d'entité à chaque fois.la source
CategorySetupFactory
pour instancier un àCategorySetup
partir d'unConsole\Command
, cependant quand j'appelle$factory->setup()
une erreur fatale se produit: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 ajoute l'option d'attribut spécifique Valeur par programme.
Exécutez ce script dans le répertoire racine de magento après l'url.
la source