Guest User

Untitled

a guest
May 4th, 2016
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. <models>
  2. ...
  3. <catalog>
  4. <rewrite>
  5. <layer>Custom_Module_Model_Layer</layer>
  6. </rewrite>
  7. </catalog>
  8. ...
  9. </models>
  10.  
  11. class Custom_Module_Model_Layer extends Mage_Catalog_Model_Layer
  12. {
  13. /**
  14. * Initialize product collection
  15. *
  16. * @param Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection $collection
  17. * @return Mage_Catalog_Model_Layer
  18. */
  19. public function prepareProductCollection($collection)
  20. {
  21. $collection
  22. ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
  23. ->addMinimalPrice()
  24. ->addFinalPrice()
  25. ->addTaxPercents()
  26. ->addUrlRewrite($this->getCurrentCategory()->getId());
  27.  
  28. Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
  29. Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
  30.  
  31. // this filters products which has are in stock or out of stock and custom_attribute enabled
  32.  
  33. Mage::getSingleton('custom_module/custom')->addCustomFilter($collection);
  34.  
  35. }
  36. }
  37.  
  38. class Custom_Module_Model_Custom extends Mage_Core_Model_Abstract
  39. {
  40. public function addCustomFilter($collection){
  41. $this->_getResource()->addCustomFilter($collection);
  42. return $this;
  43. }
  44. }
  45.  
  46. class Custom_Module_Model_Resource_Custom extends Mage_Core_Model_Resource_Db_Abstract{
  47. public function addCustomFilter($collection)
  48. {
  49. $websiteId = Mage::app()->getStore($collection->getStoreId())->getWebsiteId();
  50. $joinCondition = $this->_getReadAdapter()
  51. ->quoteInto('e.entity_id = stock_status_index.product_id'
  52. . ' AND stock_status_index.website_id = ?', $websiteId
  53. );
  54.  
  55. $joinCondition .= $this->_getReadAdapter()->quoteInto(
  56. ' AND stock_status_index.stock_id = ?',
  57. Mage_CatalogInventory_Model_Stock::DEFAULT_STOCK_ID
  58. );
  59.  
  60. $collection->getSelect()
  61. ->join(
  62. array('stock_status_index' => 'cataloginventory_stock_status'),
  63. $joinCondition,
  64. array()
  65. );
  66. // ->where('stock_status_index.stock_status=?', Mage_CatalogInventory_Model_Stock_Status::STATUS_IN_STOCK);
  67.  
  68. $attributeCode = 'custom_attribute';
  69. $attribute = Mage::getSingleton('eav/config')->getAttribute(Mage_Catalog_Model_Product::ENTITY, $attributeCode);
  70. // get custom attribute values
  71. $collection->getSelect()
  72. ->join(
  73. array("custom_attribute" => $attribute->getBackendTable()),
  74. "e.entity_id = custom_attribute.entity_id AND custom_attribute.attribute_id = " . $attribute->getId(),
  75. array()
  76. )
  77. // filter out in stock products and not in stock products with custom_attribute = 1
  78. ->where('stock_status_index.stock_status=' . Mage_CatalogInventory_Model_Stock_Status::STATUS_IN_STOCK . ' OR (stock_status_index.stock_status=' . Mage_CatalogInventory_Model_Stock_Status::STATUS_OUT_OF_STOCK . ' AND custom_attribute.value = 1)');
  79.  
  80. return $this;
  81. }
  82. }
Add Comment
Please, Sign In to add comment