Пример #1
0
 /**
  * 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);
     }
 }
Пример #2
0
 /**
  * @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'));
 }
Пример #3
0
 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);
     //        }
 }
Пример #4
0
 /**
  * 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;
 }
Пример #6
0
 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;
 }
Пример #8
0
 /**
  * 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;
     }
 }