00001 <?php 00002 /** 00003 * Magento 00004 * 00005 * NOTICE OF LICENSE 00006 * 00007 * This source file is subject to the Open Software License (OSL 3.0) 00008 * that is bundled with this package in the file LICENSE.txt. 00009 * It is also available through the world-wide-web at this URL: 00010 * http://opensource.org/licenses/osl-3.0.php 00011 * If you did not receive a copy of the license and are unable to 00012 * obtain it through the world-wide-web, please send an email 00013 * to license@magentocommerce.com so we can send you a copy immediately. 00014 * 00015 * DISCLAIMER 00016 * 00017 * Do not edit or add to this file if you wish to upgrade Magento to newer 00018 * versions in the future. If you wish to customize Magento for your 00019 * needs please refer to http://www.magentocommerce.com for more information. 00020 * 00021 * @category Mage 00022 * @package Mage_Catalog 00023 * @copyright Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com) 00024 * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) 00025 */ 00026 00027 /** 00028 * Category controller 00029 * 00030 * @category Mage 00031 * @package Mage_Catalog 00032 * @author Magento Core Team <core@magentocommerce.com> 00033 */ 00034 class Mage_Catalog_CategoryController extends Mage_Core_Controller_Front_Action 00035 { 00036 /** 00037 * Initialize requested category object 00038 * 00039 * @return Mage_Catalog_Model_Category 00040 */ 00041 protected function _initCatagory() 00042 { 00043 Mage::dispatchEvent('catalog_controller_category_init_before', array('controller_action'=>$this)); 00044 $categoryId = (int) $this->getRequest()->getParam('id', false); 00045 if (!$categoryId) { 00046 return false; 00047 } 00048 00049 $category = Mage::getModel('catalog/category') 00050 ->setStoreId(Mage::app()->getStore()->getId()) 00051 ->load($categoryId); 00052 00053 if (!Mage::helper('catalog/category')->canShow($category)) { 00054 return false; 00055 } 00056 Mage::getSingleton('catalog/session')->setLastVisitedCategoryId($category->getId()); 00057 Mage::register('current_category', $category); 00058 try { 00059 Mage::dispatchEvent('catalog_controller_category_init_after', array('category'=>$category, 'controller_action'=>$this)); 00060 } catch (Mage_Core_Exception $e) { 00061 Mage::logException($e); 00062 return false; 00063 } 00064 return $category; 00065 } 00066 00067 /** 00068 * Category view action 00069 */ 00070 public function viewAction() 00071 { 00072 00073 if ($category = $this->_initCatagory()) { 00074 00075 Mage::getModel('catalog/design')->applyDesign($category, Mage_Catalog_Model_Design::APPLY_FOR_CATEGORY); 00076 Mage::getSingleton('catalog/session')->setLastViewedCategoryId($category->getId()); 00077 00078 $update = $this->getLayout()->getUpdate(); 00079 $update->addHandle('default'); 00080 00081 if (!$category->hasChildren()) { 00082 $update->addHandle('catalog_category_layered_nochildren'); 00083 } 00084 00085 $this->addActionLayoutHandles(); 00086 00087 $update->addHandle($category->getLayoutUpdateHandle()); 00088 $update->addHandle('CATEGORY_'.$category->getId()); 00089 00090 00091 00092 if ($category->getPageLayout()) { 00093 $this->getLayout()->helper('page/layout') 00094 ->applyHandle($category->getPageLayout()); 00095 } 00096 00097 $this->loadLayoutUpdates(); 00098 00099 $update->addUpdate($category->getCustomLayoutUpdate()); 00100 00101 $this->generateLayoutXml()->generateLayoutBlocks(); 00102 00103 if ($category->getPageLayout()) { 00104 $this->getLayout()->helper('page/layout') 00105 ->applyTemplate($category->getPageLayout()); 00106 } 00107 00108 if ($root = $this->getLayout()->getBlock('root')) { 00109 $root->addBodyClass('categorypath-'.$category->getUrlPath()) 00110 ->addBodyClass('category-'.$category->getUrlKey()); 00111 } 00112 00113 $this->_initLayoutMessages('catalog/session'); 00114 $this->_initLayoutMessages('checkout/session'); 00115 $this->renderLayout(); 00116 } 00117 elseif (!$this->getResponse()->isRedirect()) { 00118 $this->_forward('noRoute'); 00119 } 00120 } 00121 }