/** * Apply price range filter to collection * * @param Zend_Controller_Request_Abstract $request * @param $filterBlock * * @return Mage_Catalog_Model_Layer_Filter_Price */ public function apply(Zend_Controller_Request_Abstract $request, $filterBlock) { if (Mage::helper('mtfilter')->isPriceEnable() && version_compare(Mage::getVersion(), '1.7.0.0') < 0) { /** * Filter must be string: $index,$range */ $filter = $request->getParam($this->getRequestVar()); if (!$filter) { return $this; } $filter = explode('-', $filter); if (count($filter) != 2) { return $this; } list($index, $range) = $filter; if (is_numeric($index) && is_numeric($range)) { $this->setPriceRange((int) $range); $this->setPriceRangeCustom($filter); $this->_applyToCollection($range, $index); $this->getLayer()->getState()->addFilter($this->_createItem($this->_renderItemLabelCustom($index, $range), $filter)); $this->_items = array(); } return $this; } else { parent::apply($request, $filterBlock); } }
/** * @magentoConfigFixture current_store catalog/layered_navigation/price_range_calculation manual */ public function testApplyManual() { $request = new Magento_Test_Request(); $request->setParam('price', '10-20'); $this->_model->apply($request, new Mage_Core_Block_Text()); $this->assertEquals(array(10, 20), $this->_model->getData('interval')); }
public function apply(Zend_Controller_Request_Abstract $request, $filterBlock) { return parent::apply($request, $filterBlock); // $filter = $request->getParam($this->getRequestVar()); // if (!$filter) return $this; // // $layeredNavigationCanonical = $this->getAttributeModel()->getLayeredNavigationCanonical(); // if ($layeredNavigationCanonical==1) { // $layerCanonicalFilter = Mage::registry('layer_canonical_filter'); // if (!$layerCanonicalFilter) $layerCanonicalFilter = array(); // $attributeCode = $this->getAttributeModel()->getAttributeCode(); // $layerCanonicalFilter[$attributeCode] = $filter; //$layeredNavigationCanonical; // Mage::unregister('layer_canonical_filter'); // Mage::register('layer_canonical_filter', $layerCanonicalFilter); // } }
/** * Prepare price filter model * * @param Magento_Test_Request|null $request * @return void */ protected function _prepareFilter($request = null) { $layer = new Mage_Catalog_Model_Layer(); $layer->setCurrentCategory(4); $layer->setState(new Mage_Catalog_Model_Layer_State()); $filter = new Mage_Catalog_Model_Layer_Filter_Price(); $filter->setLayer($layer)->setAttributeModel(new Varien_Object(array('attribute_code' => 'price'))); if (!is_null($request)) { $filter->apply($request, new Mage_Core_Block_Text()); $interval = $filter->getInterval(); if ($interval) { $this->_model->setLimits($interval[0], $interval[1]); } } $collection = $layer->getProductCollection(); $this->_model->setPricesModel($filter)->setStatistics($collection->getMinPrice(), $collection->getMaxPrice(), $collection->getPriceStandardDeviation(), $collection->getSize()); }
/** * Apply price range filter * * @param Zend_Controller_Request_Abstract $request * @param $filterBlock * * @return Mage_Catalog_Model_Layer_Filter_Price */ public function apply(Zend_Controller_Request_Abstract $request, $filterBlock) { if (!Mage::helper('catalogfilter')->priceIsSlider()) { return parent::apply($request, $filterBlock); } /** * Filter must be string: $fromPrice-$toPrice */ $filter = $request->getParam($this->getRequestVar()); if (!$filter) { return $this; } //validate filter $filterParams = explode(',', $filter); $filter = $this->_validateFilter($filterParams[0]); if (!$filter) { return $this; } list($from, $to) = $filter; $this->setInterval(array($from, $to)); $priorFilters = array(); for ($i = 1; $i < count($filterParams); ++$i) { $priorFilter = $this->_validateFilter($filterParams[$i]); if ($priorFilter) { $priorFilters[] = $priorFilter; } else { //not valid data $priorFilters = array(); break; } } if ($priorFilters) { $this->setPriorIntervals($priorFilters); } $this->_applyPriceRange(); Mage::getSingleton('catalogfilter/layer_state')->addFilter($this->getRequestVar(), $filter); return $this; }
public function apply(Zend_Controller_Request_Abstract $request, $filterBlock) { if (!Mage::helper('klevu_search/config')->isExtensionConfigured() || !Mage::helper('klevu_search')->isCatalogSearch()) { return parent::apply($request, $filterBlock); } // In Magento 1.7 the price filter parameter was changed from the "<index>,<range>" // format to the "<from>-<to>" format. Klevu uses the latter, so in <1.7 we need // to parse the parameter manually if (version_compare(Mage::getVersion(), "1.7", ">=")) { return parent::apply($request, $filterBlock); } else { $filter = $request->getParam($this->getRequestVar()); if (!$filter) { return $this; } $filter = explode("-", $filter); if (count($filter) != 2) { return $this; } list($from, $to) = $filter; $this->setInterval(array($from, $to)); $this->getLayer()->getState()->addFilter($this->_createItem($this->_renderRangeLabel(empty($from) ? 0 : $from, $to), $filter)); } }
/** * Apply decimal range filter to product collection * * @param Zend_Controller_Request_Abstract $request * @param Mage_Catalog_Block_Layer_Filter_Decimal $filterBlock * @return Mage_Catalog_Model_Layer_Filter_Decimal */ public function _______apply(Zend_Controller_Request_Abstract $request, $filterBlock) { parent::apply($request, $filterBlock); /** * Filter must be string: $index, $range */ $filter = $request->getParam($this->getRequestVar()); if (!$filter) { return $this; } $filter = explode(',', $filter); if (count($filter) != 2) { return $this; } list($index, $range) = $filter; if ((int) $index && (int) $range) { $this->setRange((int) $range); $this->_getResource()->applyFilterToCollection($this, $range, $index); $this->getLayer()->getState()->addFilter($this->_createItem($this->_renderItemLabel($range, $index), $filter)); $this->_items = array(); } return $this; }
/** * Apply price range filter to collection * * @return Mage_Catalog_Model_Layer_Filter_Price */ public function apply(Zend_Controller_Request_Abstract $request, $filterBlock) { if ($this->getRequestVar() != 'price' && Mage::helper('amshopby')->isVersionLessThan(1, 4)) { return parent::apply($request, $filterBlock); } if (!$this->calculateRanges()) { $this->_items = array($this->_createItem('', 0, 0)); } $filterBlock->setValueFrom(Mage::helper('amshopby')->__('From')); $filterBlock->setValueTo(Mage::helper('amshopby')->__('To')); $filter = $request->getParam($this->getRequestVar()); if (!$filter) { return $this; } $isFromTo = false; if (Mage::getStoreConfig('amshopby/general/use_custom_ranges')) { $isFromTo = true; } $prices = array(); /* * Try range */ $prices = explode($this->_rangeSeparator, $filter); if (count($prices) != 2) { /* * Try from to */ $prices = explode($this->_fromToSeparator, $filter); if (count($prices) == 2) { $isFromTo = true; } else { return $this; } } list($from, $to) = $prices; $from = floatval($from); $to = floatval($to); if ($from || $to) { if (!$isFromTo) { $index = $from; $range = $to; $from = ($index - 1) * $range; $to = $index * $range; } $filterBlock->setValueFrom($from > 0.01 ? $from : ''); $filterBlock->setValueTo($to > 0.01 ? $to : ''); $this->_getResource()->applyFromToFilter($this, $from, $to); $this->getLayer()->getState()->addFilter($this->_createItem($this->_renderFromToItemLabel($from, $to), $filter)); if ($this->hideAfterSelection()) { $this->_items = array(); } elseif ($this->calculateRanges()) { $this->_items = array($this->_createItem('', 0, 0)); } } return $this; }
public function apply(Zend_Controller_Request_Abstract $request, $filterBlock) { $version = Mage::getVersionInfo(); if (!$this->usePriceRanges() || (int) $version['minor'] >= 7) { return parent::apply($request, $filterBlock); } else { /** * Filter must be string: $fromPrice-$toPrice */ $filter = $request->getParam($this->getRequestVar()); if (!$filter) { return $this; } $filter = explode('-', $filter); if (count($filter) != 2) { return $this; } foreach ($filter as $v) { if ($v !== '' && $v !== '0' && (int) $v <= 0 || is_infinite((int) $v)) { return $this; } } list($from, $to) = $filter; $this->setInterval(array($from, $to)); $this->_applyToCollection($from, $to); $this->getLayer()->getState()->addFilter($this->_createItem($this->_renderRangeLabel(empty($from) ? 0 : $from, $to), $filter)); $this->_items = array(); return $this; } }