/** * {@inheritDoc} */ protected function addFilterByAttributes(ProductCollection $productCollection, array $attributes) { foreach ($attributes as $code => $option) { if (!is_array($option)) { $option = [$option]; } $productCollection->addAttributeToFilter($code, ['in' => $option]); } }
/** * Prepare configurable data for export * * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection * @param int $productIds * @return void */ public function prepareData($collection, $productIds) { $collection->addAttributeToFilter('entity_id', ['in' => $productIds])->addAttributeToFilter('type_id', ['eq' => \Magento\ConfigurableProduct\Model\Product\Type\Configurable::TYPE_CODE]); while ($product = $collection->fetchItem()) { $productAttributesOptions = $product->getTypeInstance()->getConfigurableOptions($product); foreach ($productAttributesOptions as $productAttributeOption) { $this->configurableData[$product->getId()] = []; $variations = []; $variationsLabels = []; foreach ($productAttributeOption as $optValues) { $variations[$optValues['sku']][] = $optValues['attribute_code'] . '=' . $optValues['option_title']; if (!empty($optValues['super_attribute_label'])) { $variationsLabels[$optValues['attribute_code']] = $optValues['attribute_code'] . '=' . $optValues['super_attribute_label']; } } foreach ($variations as $sku => $values) { $variations[$sku] = 'sku=' . $sku . ImportProduct::DEFAULT_GLOBAL_MULTI_VALUE_SEPARATOR . implode(ImportProduct::DEFAULT_GLOBAL_MULTI_VALUE_SEPARATOR, $values); } $variations = implode(ImportProduct::PSEUDO_MULTI_LINE_SEPARATOR, $variations); $variationsLabels = implode(ImportProduct::DEFAULT_GLOBAL_MULTI_VALUE_SEPARATOR, $variationsLabels); $this->configurableData[$product->getId()] = ['configurable_variations' => $variations, 'configurable_variation_labels' => $variationsLabels]; } } }
/** * Add specific filters * * @param Collection $collection * @return Collection */ protected function addCollectionFilters(Collection $collection) { $relatedProducts = []; /** @var ProductLinkInterface $linkItem */ foreach ($this->productLinkRepository->getList($this->getProduct()) as $linkItem) { if ($linkItem->getLinkType() !== $this->getLinkType()) { continue; } $relatedProducts[] = $this->productRepository->get($linkItem->getLinkedProductSku())->getId(); } if ($relatedProducts) { $collection->addAttributeToFilter($collection->getIdFieldName(), ['nin' => [$relatedProducts]]); } return $collection; }
/** * Prepare data for export * * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection * @param int $productIds * @return $this */ public function prepareData($collection, $productIds) { $collection->addAttributeToFilter('entity_id', ['in' => $productIds])->addAttributeToFilter('type_id', ['eq' => \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE]); return $this->populateBundleData($collection); }
/** * Add attribute to filter * * @param AbstractAttribute|string $attribute * @param array|null $condition * @param string $joinType * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner') { switch ($attribute) { case 'rt.review_id': case 'rt.created_at': case 'rt.status_id': case 'rdt.title': case 'rdt.nickname': case 'rdt.detail': $conditionSql = $this->_getConditionSql($attribute, $condition); $this->getSelect()->where($conditionSql); break; case 'stores': $this->setStoreFilter($condition); break; case 'type': if ($condition == 1) { $conditionParts = [$this->_getConditionSql('rdt.customer_id', ['is' => new \Zend_Db_Expr('NULL')]), $this->_getConditionSql('rdt.store_id', ['eq' => \Magento\Store\Model\Store::DEFAULT_STORE_ID])]; $conditionSql = implode(' AND ', $conditionParts); } elseif ($condition == 2) { $conditionSql = $this->_getConditionSql('rdt.customer_id', ['gt' => 0]); } else { $conditionParts = [$this->_getConditionSql('rdt.customer_id', ['is' => new \Zend_Db_Expr('NULL')]), $this->_getConditionSql('rdt.store_id', ['neq' => \Magento\Store\Model\Store::DEFAULT_STORE_ID])]; $conditionSql = implode(' AND ', $conditionParts); } $this->getSelect()->where($conditionSql); break; default: parent::addAttributeToFilter($attribute, $condition, $joinType); break; } return $this; }
/** * @param ProductCollection $productCollection * @param array $attributes * @return void */ protected function addFilterByAttributes(ProductCollection $productCollection, array $attributes) { foreach ($attributes as $code => $option) { $productCollection->addAttributeToFilter($code, ['eq' => $option]); } }