/htdocs/app/code/core/Mage/Catalog/Block/Layer/View.php
PHP | 255 lines | 107 code | 29 blank | 119 comment | 8 complexity | 7c92a839423cdcc10d4b5b8303e84cc9 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
- <?php
- /**
- * Magento
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Open Software License (OSL 3.0)
- * that is bundled with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://opensource.org/licenses/osl-3.0.php
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@magentocommerce.com so we can send you a copy immediately.
- *
- * DISCLAIMER
- *
- * Do not edit or add to this file if you wish to upgrade Magento to newer
- * versions in the future. If you wish to customize Magento for your
- * needs please refer to http://www.magentocommerce.com for more information.
- *
- * @category Mage
- * @package Mage_Catalog
- * @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
- /**
- * Catalog layered navigation view block
- *
- * @category Mage
- * @package Mage_Catalog
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_Catalog_Block_Layer_View extends Mage_Core_Block_Template
- {
- /**
- * State block name
- *
- * @var string
- */
- protected $_stateBlockName;
- /**
- * Category Block Name
- *
- * @var string
- */
- protected $_categoryBlockName;
- /**
- * Attribute Filter Block Name
- *
- * @var string
- */
- protected $_attributeFilterBlockName;
- /**
- * Price Filter Block Name
- *
- * @var string
- */
- protected $_priceFilterBlockName;
- /**
- * Decimal Filter Block Name
- *
- * @var string
- */
- protected $_decimalFilterBlockName;
- /**
- * Internal constructor
- */
- protected function _construct()
- {
- parent::_construct();
- $this->_initBlocks();
- }
- /**
- * Initialize blocks names
- */
- protected function _initBlocks()
- {
- $this->_stateBlockName = 'catalog/layer_state';
- $this->_categoryBlockName = 'catalog/layer_filter_category';
- $this->_attributeFilterBlockName = 'catalog/layer_filter_attribute';
- $this->_priceFilterBlockName = 'catalog/layer_filter_price';
- $this->_decimalFilterBlockName = 'catalog/layer_filter_decimal';
- }
- /**
- * Get attribute filter block name
- *
- * @deprecated after 1.4.1.0
- *
- * @return string
- */
- protected function _getAttributeFilterBlockName()
- {
- return 'catalog/layer_filter_attribute';
- }
- /**
- * Prepare child blocks
- *
- * @return Mage_Catalog_Block_Layer_View
- */
- protected function _prepareLayout()
- {
- $stateBlock = $this->getLayout()->createBlock($this->_stateBlockName)
- ->setLayer($this->getLayer());
- $categoryBlock = $this->getLayout()->createBlock($this->_categoryBlockName)
- ->setLayer($this->getLayer())
- ->init();
- $this->setChild('layer_state', $stateBlock);
- $this->setChild('category_filter', $categoryBlock);
- $filterableAttributes = $this->_getFilterableAttributes();
- foreach ($filterableAttributes as $attribute) {
- if ($attribute->getAttributeCode() == 'price') {
- $filterBlockName = $this->_priceFilterBlockName;
- } elseif ($attribute->getBackendType() == 'decimal') {
- $filterBlockName = $this->_decimalFilterBlockName;
- } else {
- $filterBlockName = $this->_attributeFilterBlockName;
- }
- $this->setChild($attribute->getAttributeCode() . '_filter',
- $this->getLayout()->createBlock($filterBlockName)
- ->setLayer($this->getLayer())
- ->setAttributeModel($attribute)
- ->init());
- }
- $this->getLayer()->apply();
- return parent::_prepareLayout();
- }
- /**
- * Get layer object
- *
- * @return Mage_Catalog_Model_Layer
- */
- public function getLayer()
- {
- return Mage::getSingleton('catalog/layer');
- }
- /**
- * Get all fiterable attributes of current category
- *
- * @return array
- */
- protected function _getFilterableAttributes()
- {
- $attributes = $this->getData('_filterable_attributes');
- if (is_null($attributes)) {
- $attributes = $this->getLayer()->getFilterableAttributes();
- $this->setData('_filterable_attributes', $attributes);
- }
- return $attributes;
- }
- /**
- * Get layered navigation state html
- *
- * @return string
- */
- public function getStateHtml()
- {
- return $this->getChildHtml('layer_state');
- }
- /**
- * Get all layer filters
- *
- * @return array
- */
- public function getFilters()
- {
- $filters = array();
- if ($categoryFilter = $this->_getCategoryFilter()) {
- $filters[] = $categoryFilter;
- }
- $filterableAttributes = $this->_getFilterableAttributes();
- foreach ($filterableAttributes as $attribute) {
- $filters[] = $this->getChild($attribute->getAttributeCode() . '_filter');
- }
- return $filters;
- }
- /**
- * Get category filter block
- *
- * @return Mage_Catalog_Block_Layer_Filter_Category
- */
- protected function _getCategoryFilter()
- {
- return $this->getChild('category_filter');
- }
- /**
- * Check availability display layer options
- *
- * @return bool
- */
- public function canShowOptions()
- {
- foreach ($this->getFilters() as $filter) {
- if ($filter->getItemsCount()) {
- return true;
- }
- }
- return false;
- }
- /**
- * Check availability display layer block
- *
- * @return bool
- */
- public function canShowBlock()
- {
- return $this->canShowOptions() || count($this->getLayer()->getState()->getFilters());
- }
- /**
- * Retrieve Price Filter block
- *
- * @return Mage_Catalog_Block_Layer_Filter_Price
- */
- protected function _getPriceFilter()
- {
- return $this->getChild('_price_filter');
- }
- /**
- * Get url for 'Clear All' link
- *
- * @return string
- */
- public function getClearUrl()
- {
- return $this->getChild('layer_state')->getClearUrl();
- }
- }