/**
  * Add attribute to filter
  *
  * @param Mage_Eav_Model_Entity_Attribute_Abstract|string $attribute
  * @param array $condition
  * @param string $joinType
  * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
  */
 public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner')
 {
     if ($this->isEnabledFlat()) {
         if ($attribute instanceof Mage_Eav_Model_Entity_Attribute_Abstract) {
             $attribute = $attribute->getAttributeCode();
         }
         if (is_array($attribute)) {
             $sqlArr = array();
             foreach ($attribute as $condition) {
                 $sqlArr[] = $this->_getAttributeConditionSql($condition['attribute'], $condition, $joinType);
             }
             $conditionSql = '(' . join(') OR (', $sqlArr) . ')';
             $this->getSelect()->where($conditionSql);
             return $this;
         }
         if (!isset($this->_selectAttributes[$attribute])) {
             $this->addAttributeToSelect($attribute);
         }
         if (isset($this->_selectAttributes[$attribute])) {
             $this->getSelect()->where($this->_getConditionSql('e.' . $attribute, $condition));
         }
         return $this;
     }
     $this->_allIdsCache = null;
     if (is_string($attribute) && $attribute == 'is_saleable') {
         $isStockManagedInConfig = (int) Mage::getStoreConfig(Mage_CatalogInventory_Model_Stock_Item::XML_PATH_MANAGE_STOCK);
         $inventoryTable = $this->getTable('cataloginventory_stock_item');
         $this->getSelect()->where($this->_getConditionSql("(\n                        IF(\n                            IF(\n                                {$inventoryTable}.use_config_manage_stock, \n                                {$isStockManagedInConfig}, \n                                {$inventoryTable}.manage_stock\n                            ), \n                            {$inventoryTable}.is_in_stock, \n                            1\n                        )\n                    )", $condition));
         return $this;
     } else {
         return parent::addAttributeToFilter($attribute, $condition, $joinType);
     }
 }
 /**
  * Add attribute to filter
  *
  * @param Mage_Eav_Model_Entity_Attribute_Abstract|string $attribute
  * @param array $condition
  * @param string $joinType
  * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
  */
 public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner')
 {
     if ($this->isEnabledFlat()) {
         if ($attribute instanceof Mage_Eav_Model_Entity_Attribute_Abstract) {
             $attribute = $attribute->getAttributeCode();
         }
         if (!isset($this->_selectAttributes[$attribute])) {
             $this->addAttributeToSelect($attribute);
         }
         if (isset($this->_selectAttributes[$attribute])) {
             $this->getSelect()->where($this->_getConditionSql('e.' . $attribute, $condition));
         }
         return $this;
     }
     $this->_allIdsCache = null;
     if (is_string($attribute) && $attribute == 'is_saleable') {
         return $this->getSelect()->where($this->_getConditionSql('(IF(manage_stock, is_in_stock, 1))', $condition));
     } else {
         return parent::addAttributeToFilter($attribute, $condition, $joinType);
     }
 }
示例#3
0
 /**
  * Add attribute to filter
  *
  * @param Mage_Eav_Model_Entity_Attribute_Abstract|string $attribute
  * @param array $condition
  * @param string $joinType
  * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
  */
 public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner')
 {
     if ($this->isEnabledFlat()) {
         if ($attribute instanceof Mage_Eav_Model_Entity_Attribute_Abstract) {
             $attribute = $attribute->getAttributeCode();
         }
         if (is_array($attribute)) {
             $sqlArr = array();
             foreach ($attribute as $condition) {
                 $sqlArr[] = $this->_getAttributeConditionSql($condition['attribute'], $condition, $joinType);
             }
             $conditionSql = '(' . join(') OR (', $sqlArr) . ')';
             $this->getSelect()->where($conditionSql, null, Varien_Db_Select::TYPE_CONDITION);
             return $this;
         }
         if (!isset($this->_selectAttributes[$attribute])) {
             $this->addAttributeToSelect($attribute);
         }
         if (isset($this->_selectAttributes[$attribute])) {
             $this->getSelect()->where($this->_getConditionSql('e.' . $attribute, $condition));
         }
         return $this;
     }
     $this->_allIdsCache = null;
     if (is_string($attribute) && $attribute == 'is_saleable') {
         $columns = $this->getSelect()->getPart(Zend_Db_Select::COLUMNS);
         foreach ($columns as $columnEntry) {
             list($correlationName, $column, $alias) = $columnEntry;
             if ($alias == 'is_saleable') {
                 if ($column instanceof Zend_Db_Expr) {
                     $field = $column;
                 } else {
                     $adapter = $this->getSelect()->getAdapter();
                     if (empty($correlationName)) {
                         $field = $adapter->quoteColumnAs($column, $alias, true);
                     } else {
                         $field = $adapter->quoteColumnAs(array($correlationName, $column), $alias, true);
                     }
                 }
                 $this->getSelect()->where("{$field} = ?", $condition);
                 break;
             }
         }
         return $this;
     } else {
         return parent::addAttributeToFilter($attribute, $condition, $joinType);
     }
 }
示例#4
0
 public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner')
 {
     $this->_allIdsCache = null;
     if (is_string($attribute) && $attribute == 'is_saleable') {
         return $this->getSelect()->where($this->_getConditionSql('(IF(manage_stock, is_in_stock, 1))', $condition));
     } else {
         return parent::addAttributeToFilter($attribute, $condition, $joinType);
     }
 }