Example #1
0
 /**
  * {@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;
 }
Example #6
0
 /**
  * @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]);
     }
 }