Magento根据条件进行商品筛选

在商城项目中根据天健进行商品筛选是在正常不过的,具体代码如下:

$category= Mage::getModel('catalog/category')->load($category_id);
$products = $category->getProductCollection();

$products = Mage::helper('fun_catalog/layer_attribute')->applyFilterAttribute('color_group',$color_id, $products, $category);

自己封好的方法,第一个参数是所要筛选的字段,第二个参数是对应字段的ID:

/**
* 增加商品筛选方法
 * 
 * @param string $attributeCode        	
 * @param int $optionId        	
 * @param Mage_Catalog_Model_Resource_Product_Collection $productCollection        	
 * @param Mage_Catalog_Model_Category $category        	
 * @return Mage_Catalog_Model_Resource_Product_Collection | null
 */
public function applyFilterAttribute($attributeCode, $optionId, $productCollection = null, $category) 
{
	if (is_null ( $productCollection ) && $category instanceof Mage_Catalog_Model_Category) {
		$productCollection = $category->getProductCollection ();
	}
	
	$attributeId = Mage::getResourceModel ( 'eav/entity_attribute' )->getIdByCode ( 'catalog_product', $attributeCode );
	if ($productCollection && $attributeId && $optionId) {
		$connection = Mage::getSingleton ( 'core/resource' )->getConnection ( 'core_read' );
		$tableAlias = $attributeCode . '_idx';
		$conditions = array (
				"{$tableAlias}.entity_id = e.entity_id",
				$connection->quoteInto ( "{$tableAlias}.attribute_id = ?", $attributeId ),
				$connection->quoteInto ( "{$tableAlias}.store_id = ?", $productCollection->getStoreId () ),
				$connection->quoteInto ( "{$tableAlias}.value = ?", $optionId ) 
		);
		
		$productCollection->getSelect ()->join ( array (
				$tableAlias => Mage::getResourceModel ( 'catalog/layer_filter_attribute' )->getMainTable () 
		), implode ( ' AND ', $conditions ), array () );
	}
	
	return $productCollection;
}

需要注意的是商品的Size是一个特殊的字段,因为商品的Size会根据商品的类别而存储不同的值,例如:上衣可能是tops_size,而裤子可能就是bottoms_size,所以要根据对应的code得到对应的值,不然会出现code不匹配取不到值的情况,而下面的方法会完美的根据商品匹配对应的size_code:

$attribute_set = $category->getAttributeSet();
$sizeAttribute= Mage::getResourceModel('catalog/product_attribute_collection')
       ->setAttributeSetFilter($attribute_set)
       ->addFieldToFilter('attribute_code',array('like' => '%size'))
       ->getFirstItem();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值