1: <?php
2: /**
3: * Magento
4: *
5: * NOTICE OF LICENSE
6: *
7: * This source file is subject to the Open Software License (OSL 3.0)
8: * that is bundled with this package in the file LICENSE.txt.
9: * It is also available through the world-wide-web at this URL:
10: * http://opensource.org/licenses/osl-3.0.php
11: * If you did not receive a copy of the license and are unable to
12: * obtain it through the world-wide-web, please send an email
13: * to license@magentocommerce.com so we can send you a copy immediately.
14: *
15: * DISCLAIMER
16: *
17: * Do not edit or add to this file if you wish to upgrade Magento to newer
18: * versions in the future. If you wish to customize Magento for your
19: * needs please refer to http://www.magentocommerce.com for more information.
20: *
21: * @category Mage
22: * @package Mage_CatalogSearch
23: * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24: * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25: */
26:
27: class Mage_CatalogSearch_Model_Layer extends Mage_Catalog_Model_Layer
28: {
29: const XML_PATH_DISPLAY_LAYER_COUNT = 'catalog/search/use_layered_navigation_count';
30:
31: /**
32: * Get current layer product collection
33: *
34: * @return Mage_Catalog_Model_Resource_Eav_Resource_Product_Collection
35: */
36: public function getProductCollection()
37: {
38: if (isset($this->_productCollections[$this->getCurrentCategory()->getId()])) {
39: $collection = $this->_productCollections[$this->getCurrentCategory()->getId()];
40: } else {
41: $collection = Mage::getResourceModel('catalogsearch/fulltext_collection');
42: $this->prepareProductCollection($collection);
43: $this->_productCollections[$this->getCurrentCategory()->getId()] = $collection;
44: }
45: return $collection;
46: }
47:
48: /**
49: * Prepare product collection
50: *
51: * @param Mage_Catalog_Model_Resource_Eav_Resource_Product_Collection $collection
52: * @return Mage_Catalog_Model_Layer
53: */
54: public function prepareProductCollection($collection)
55: {
56: $collection
57: ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
58: ->addSearchFilter(Mage::helper('catalogsearch')->getQuery()->getQueryText())
59: ->setStore(Mage::app()->getStore())
60: ->addMinimalPrice()
61: ->addFinalPrice()
62: ->addTaxPercents()
63: ->addStoreFilter()
64: ->addUrlRewrite();
65:
66: Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
67: Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);
68:
69: return $this;
70: }
71:
72: /**
73: * Get layer state key
74: *
75: * @return string
76: */
77: public function getStateKey()
78: {
79: if ($this->_stateKey === null) {
80: $this->_stateKey = 'Q_' . Mage::helper('catalogsearch')->getQuery()->getId()
81: . '_'. parent::getStateKey();
82: }
83: return $this->_stateKey;
84: }
85:
86: /**
87: * Get default tags for current layer state
88: *
89: * @param array $additionalTags
90: * @return array
91: */
92: public function getStateTags(array $additionalTags = array())
93: {
94: $additionalTags = parent::getStateTags($additionalTags);
95: $additionalTags[] = Mage_CatalogSearch_Model_Query::CACHE_TAG;
96: return $additionalTags;
97: }
98:
99: /**
100: * Add filters to attribute collection
101: *
102: * @param Mage_Catalog_Model_Resource_Eav_Resource_Product_Attribute_Collection $collection
103: * @return Mage_Catalog_Model_Resource_Eav_Resource_Product_Attribute_Collection
104: */
105: protected function _prepareAttributeCollection($collection)
106: {
107: $collection->addIsFilterableInSearchFilter()
108: ->addVisibleFilter();
109: return $collection;
110: }
111:
112: /**
113: * Prepare attribute for use in layered navigation
114: *
115: * @param Mage_Eav_Model_Entity_Attribute $attribute
116: * @return Mage_Eav_Model_Entity_Attribute
117: */
118: protected function _prepareAttribute($attribute)
119: {
120: $attribute = parent::_prepareAttribute($attribute);
121: $attribute->setIsFilterable(Mage_Catalog_Model_Layer_Filter_Attribute::OPTIONS_ONLY_WITH_RESULTS);
122: return $attribute;
123: }
124: }
125: