예제 #1
0
 /**
  * Retrieve attribute collection prefiltered with only attribute usable in rules.
  *
  * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
  */
 public function getAttributeCollection()
 {
     if ($this->attributeCollection === null) {
         $this->attributeCollection = $this->attributeCollectionFactory->create();
         $mapping = $this->getMapping();
         $attributeNameMapping = array_flip($this->fieldNameMapping);
         $arrayNameCb = function (FieldInterface $field) use($attributeNameMapping) {
             $attributeName = $field->getName();
             if (isset($attributeNameMapping[$attributeName])) {
                 $attributeName = $attributeNameMapping[$attributeName];
             }
             return $attributeName;
         };
         $attributeFilterCb = function (FieldInterface $field) use($mapping) {
             try {
                 $fieldName = $field->getName();
                 $optionTextFieldName = $this->mappingHelper->getOptionTextFieldName($fieldName);
                 $field = $mapping->getField($optionTextFieldName);
             } catch (\Exception $e) {
             }
             return $field->isFilterable() || $field->isSearchable();
         };
         $fieldNames = array_map($arrayNameCb, array_filter($this->getMapping()->getFields(), $attributeFilterCb));
         $this->attributeCollection->addFieldToFilter('attribute_code', $fieldNames)->addFieldToFilter('backend_type', ['neq' => 'datetime']);
     }
     return $this->attributeCollection;
 }
예제 #2
0
 /**
  * @return $this
  */
 public function _getAttributes()
 {
     $attributes = $this->attributeCollection->addFieldToFilter('is_visible', 1)->addFieldToFilter('frontend_input', ['nin' => ['boolean', 'date', 'datetime', 'gallery', 'image', 'media_image', 'select', 'multiselect', 'textarea']])->load();
     return $attributes;
 }