Exemplo n.º 1
0
 /**
  * Retrieve product type list
  *
  * @return array
  */
 public function items()
 {
     $result = array();
     foreach (Mage_Catalog_Model_Product_Type::getOptionArray() as $type => $label) {
         $result[] = array('type' => $type, 'label' => $label);
     }
     return $result;
 }
Exemplo n.º 2
0
 public function testGetOptionArray()
 {
     $options = Mage_Catalog_Model_Product_Type::getOptionArray();
     $this->assertArrayHasKey(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE, $options);
     $this->assertArrayHasKey(Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL, $options);
     $this->assertArrayHasKey(Mage_Catalog_Model_Product_Type::TYPE_GROUPED, $options);
     $this->assertArrayHasKey(Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE, $options);
     $this->assertArrayHasKey(Mage_Catalog_Model_Product_Type::TYPE_BUNDLE, $options);
     $this->assertArrayHasKey(Mage_Downloadable_Model_Product_Type::TYPE_DOWNLOADABLE, $options);
 }
Exemplo n.º 3
0
 public function getProductsCollection($filterData = '', $current_page = 0, $length = 50)
 {
     if (is_null($this->_productCollection) && $this->getId()) {
         $collection = Mage::getModel('gomage_feed/product_collection')->addAttributeToSelect('*');
         $collection->addStoreFilter(Mage::app()->getStore());
         if ($length != 0) {
             $collection->setPage($current_page + 1, $length);
         }
         $collection->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())->addMinimalPrice()->addFinalPrice()->addTaxPercents()->addUrlRewrite($this->getRootCategory()->getId());
         if ($this->getVisibility()) {
             switch ($this->getVisibility()) {
                 case Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE:
                     $collection->setVisibility(array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE));
                     break;
                 case Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG:
                     Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
                     break;
                 case Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_SEARCH:
                     Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);
                     break;
                 case Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH:
                     Mage::getSingleton('catalog/product_visibility')->addVisibleInSiteFilterToCollection($collection);
                     break;
                 case 5:
                     $collection->setVisibility(array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG));
                     break;
                 case 6:
                     $collection->setVisibility(array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_SEARCH));
                     break;
             }
         }
         if ($this->getUseLayer()) {
             $collection->joinField('is_in_stock', 'cataloginventory/stock_item', 'is_in_stock', 'product_id=entity_id');
             $collection->addAttributeToFilter('is_in_stock', array('eq' => Mage_CatalogInventory_Model_Stock::STOCK_IN_STOCK));
         }
         if ($this->getUseDisabled()) {
             Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
             $collection->addAttributeToFilter('status', array('in' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED));
         }
         if ($this->getFilter()) {
             $filter_values = json_decode($this->getFilter(), true);
             $filters = array();
             foreach ((array) $filter_values as $filter) {
                 $code = trim(@$filter['attribute_code']);
                 $condition = trim(@$filter['condition']);
                 $value = trim(@$filter['value']);
                 if ($code && $condition && $value != '') {
                     if (!isset($filters[$code])) {
                         $filters[$code] = array();
                     }
                     if (!isset($filters[$code][$condition])) {
                         $filters[$code][$condition] = array();
                     }
                     $filters[$code][$condition][] = $value;
                 }
             }
             foreach ($filters as $code => $filter) {
                 if ($code == 'qty') {
                     $collection->joinField('qty', 'cataloginventory/stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left');
                 }
                 foreach ($filter as $condition => $value) {
                     if ($code == 'category_id') {
                         foreach ($value as $_value) {
                             $collection->prepareFeedCategoryFilter($condition, $_value);
                         }
                     } elseif ($code == 'product_type') {
                         $all_product_type = Mage_Catalog_Model_Product_Type::getOptionArray();
                         $all_product_type = array_keys($all_product_type);
                         if (isset($filter['neq'])) {
                             $all_product_type = array_diff($all_product_type, $filter['neq']);
                         }
                         if (isset($filter['eq'])) {
                             $all_product_type = array_intersect($all_product_type, $filter['eq']);
                         }
                         $collection->addAttributeToFilter('type_id', array('in' => $all_product_type));
                         break;
                     } else {
                         switch ($condition) {
                             case 'eq':
                                 $condition = 'in';
                                 break;
                             case 'neq':
                                 $condition = 'nin';
                                 break;
                             case 'gt':
                             case 'gteq':
                                 $value = max($value);
                                 break;
                             case 'lt':
                             case 'lteq':
                                 $value = min($value);
                                 break;
                             case 'like':
                                 if (count($value) > 1) {
                                     $_attribute = array();
                                     foreach ($value as $_value) {
                                         $_attribute[] = array('attribute' => $code, $condition => $_value);
                                     }
                                     $collection->addAttributeToFilter($_attribute);
                                     continue 2;
                                 } else {
                                     $value = $value[0];
                                 }
                             case 'nlike':
                                 foreach ($value as $_value) {
                                     $collection->addAttributeToFilter($code, array($condition => $_value));
                                 }
                                 continue 2;
                                 break;
                         }
                         $collection->addAttributeToFilter($code, array($condition => $value));
                     }
                 }
             }
             if (isset($filters['category_id'])) {
                 $collection->addFeedCategoryFilter();
             }
         }
         $this->_productCollection = $collection;
     }
     return $this->_productCollection;
 }