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: /**
28: * Catalogsearch term block
29: *
30: * @category Mage
31: * @package Mage_CatalogSearch
32: * @author Magento Core Team <core@magentocommerce.com>
33: */
34: class Mage_CatalogSearch_Block_Term extends Mage_Core_Block_Template
35: {
36: protected $_terms;
37: protected $_minPopularity;
38: protected $_maxPopularity;
39:
40: public function __construct()
41: {
42: parent::__construct();
43: }
44:
45: /**
46: * Load terms and try to sort it by names
47: *
48: * @return Mage_CatalogSearch_Block_Term
49: */
50: protected function _loadTerms()
51: {
52: if (empty($this->_terms)) {
53: $this->_terms = array();
54: $terms = Mage::getResourceModel('catalogsearch/query_collection')
55: ->setPopularQueryFilter(Mage::app()->getStore()->getId())
56: ->setPageSize(100)
57: ->load()
58: ->getItems();
59:
60: if( count($terms) == 0 ) {
61: return $this;
62: }
63:
64:
65: $this->_maxPopularity = reset($terms)->getPopularity();
66: $this->_minPopularity = end($terms)->getPopularity();
67: $range = $this->_maxPopularity - $this->_minPopularity;
68: $range = ( $range == 0 ) ? 1 : $range;
69: foreach ($terms as $term) {
70: if( !$term->getPopularity() ) {
71: continue;
72: }
73: $term->setRatio(($term->getPopularity()-$this->_minPopularity)/$range);
74: $temp[$term->getName()] = $term;
75: $termKeys[] = $term->getName();
76: }
77: natcasesort($termKeys);
78:
79: foreach ($termKeys as $termKey) {
80: $this->_terms[$termKey] = $temp[$termKey];
81: }
82: }
83: return $this;
84: }
85:
86: public function getTerms()
87: {
88: $this->_loadTerms();
89: return $this->_terms;
90: }
91:
92: public function getSearchUrl($obj)
93: {
94: $url = Mage::getModel('core/url');
95: /*
96: * url encoding will be done in Url.php http_build_query
97: * so no need to explicitly called urlencode for the text
98: */
99: $url->setQueryParam('q', $obj->getName());
100: return $url->getUrl('catalogsearch/result');
101: }
102:
103: public function getMaxPopularity()
104: {
105: return $this->_maxPopularity;
106: }
107:
108: public function getMinPopularity()
109: {
110: return $this->_minPopularity;
111: }
112: }
113: