Wie kann ich in Magento 2 programmgesteuert 'Neue Produkte' der Kategorie 'NEUE PRODUKTE' zuordnen?
9
Sie müssen Kategorie-IDs und Produkt-IDs abrufen, um Daten festzulegen: Implementieren Sie dies:
$this->getCategoryLinkManagement()->assignProductToCategories(
$product->getSku(),
$product->getCategoryIds()
);
Implementieren Sie auch diese Funktion:
private function getCategoryLinkManagement()
{
if (null === $this->categoryLinkManagement) {
$this->categoryLinkManagement = \Magento\Framework\App\ObjectManager::getInstance()
->get('Magento\Catalog\Api\CategoryLinkManagementInterface');
}
return $this->categoryLinkManagement;
}
Restabhängigkeit, die Sie verwalten sollten für: Magento\Catalog\Api\CategoryLinkManagementInterface
initialisieren:
protected $categoryLinkManagement;
Die direkte Verwendung von \ Magento \ Framework \ App \ ObjectManager :: getInstance () ist gemäß Magento nicht gültig, sodass Sie es in Constructor einfügen können
Diese Antwort gilt für Versionen unter Magento 2.2. Bitte beachten Sie dies
Ich denke, dies erfordert eine aktualisierte Antwort, die den Objektmanager nicht verwendet. Es gibt auch einige Knicke, die nirgendwo erwähnt werden.
Fügen Sie in Ihrem Konstruktor das CategoryLinkManagementInterface ein:
Weisen Sie später in Ihrem Code die folgenden Kategorien zu:
Dies ersetzt alle vorherigen Kategoriezuweisungen. Wenn Sie die vorhandenen Kategoriezuweisungen beibehalten möchten, verwenden Sie Folgendes:
Beachten Sie : Die Linkverwaltung verschiebt die Kategoriezuordnung (für das Produktattribut) zum geplanten Indexer. Dies bedeutet, wenn Sie andere Änderungen am Produkt vornehmen und es nach der Zuweisung von ProductToCategories () speichern.
Die Kategoriezuweisungen werden gelöscht, da $ product entweder null enthält (wenn es sich um ein neu erstelltes Produkt handelt) oder nur die zuvor zugewiesenen Kategorien für sein Attribut. Ebenfalls,
direkt nach assignProductToCategories () hilft aus dem oben genannten Grund nicht. Weisen Sie entweder Kategorien zum spätestmöglichen Zeitpunkt zu (wenn Sie das Produkt danach nicht speichern) oder weisen Sie das Attribut manuell zu, bevor Sie es erneut speichern
Wenn Sie sich für Letzteres entscheiden, können Sie wahrscheinlich nur auf setCategoryIds () zurückgreifen. Ich habe keinen der beiden Fälle (assignProductToCategories + setCategoryIds + save oder setCategoryIds + save) auf Auswirkungen auf die Leistung getestet, daher kann ich dies nicht kommentieren, aber ich denke, der gesamte Umstand war wichtig zu erwähnen.
quelle
Produkte der Kategorie zuordnen
Produkte aus der Kategorie entfernen
quelle
Selbst wenn die Frage bereits beantwortet wurde, möchte ich eine schnellere Möglichkeit hinzufügen, eine Produktgruppe einer Kategorie zuzuweisen, da die Iteration
$this->getCategoryLinkManagement()->assignProductToCategories()
recht langsam istDiese Alternative beinhaltet das Laden der Kategorie, der unsere Produktgruppe zugewiesen werden soll. Wir müssen also
Magento\Catalog\Model\CategoryFactory
eine Gruppe von Produkten auf die Kategorie setzen,setPostedProducts()
die ein Array von verwendet,['entity_id','position']
sodass ein Codebeispiel ungefähr so aussehen würde:Hoffe das hilft jemandem!
quelle
quelle