/** * {@inheritdoc} */ public function getAssignedProducts($categoryId) { $category = $this->categoryRepository->get($categoryId); $productsPosition = $category->getProductsPosition(); /** @var \Magento\Framework\Data\Collection\Db $products */ $products = $category->getProductCollection(); /** @var \Magento\Catalog\Api\Data\CategoryProductLinkInterface[] $links */ $links = []; /** @var \Magento\Catalog\Model\Product $product */ foreach ($products->getItems() as $productId => $product) { /** @var \Magento\Catalog\Api\Data\CategoryProductLinkInterface $link */ $link = $this->productLinkFactory->create(); $link->setSku($product->getSku())->setPosition($productsPosition[$productId])->setCategoryId($category->getId()); $links[] = $link; } return $links; }
/** * {@inheritdoc} */ public function getAssignedProducts($categoryId) { $category = $this->categoryRepository->get($categoryId); /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $products */ $products = $category->getProductCollection(); $products->addFieldToSelect('position'); /** @var \Magento\Catalog\Api\Data\CategoryProductLinkInterface[] $links */ $links = []; /** @var \Magento\Catalog\Model\Product $product */ foreach ($products->getItems() as $product) { /** @var \Magento\Catalog\Api\Data\CategoryProductLinkInterface $link */ $link = $this->productLinkFactory->create(); $link->setSku($product->getSku())->setPosition($product->getData('cat_index_position'))->setCategoryId($category->getId()); $links[] = $link; } return $links; }
/** * Assign product to given categories * * @param string $productSku * @param \int[] $categoryIds * @return bool */ public function assignProductToCategories($productSku, array $categoryIds) { $product = $this->getProductRepository()->get($productSku); $assignedCategories = $this->getProductResource()->getCategoryIds($product); foreach (array_diff($assignedCategories, $categoryIds) as $categoryId) { $this->getCategoryLinkRepository()->deleteByIds($categoryId, $productSku); } foreach (array_diff($categoryIds, $assignedCategories) as $categoryId) { /** @var \Magento\Catalog\Api\Data\CategoryProductLinkInterface $categoryProductLink */ $categoryProductLink = $this->productLinkFactory->create(); $categoryProductLink->setSku($productSku); $categoryProductLink->setCategoryId($categoryId); $categoryProductLink->setPosition(0); $this->getCategoryLinkRepository()->save($categoryProductLink); } $productCategoryIndexer = $this->getIndexerRegistry()->get(Indexer\Product\Category::INDEXER_ID); if (!$productCategoryIndexer->isScheduled()) { $productCategoryIndexer->reindexRow($product->getId()); } return true; }