Magento 利用block缓存 查询的所有分类菜单

来源:互联网 发布:淘宝的自制护肤品 编辑:程序博客网 时间:2024/06/06 08:48

1.新建 app\code\Mage\Page\Block\Html\Homemenu.php 文件

代码如下:

<?php/** * Created by PhpStorm. * User: yongkd * Date: 2015/7/30 * Time: 12:54 *//** * Home menu block */class Mage_Page_Block_Html_Homemenu extends Mage_Core_Block_Template{    public function __construct()    {        $this->addData(array(            'cache_lifetime'=> 7200,            'cache_tags'    => array(Mage_Core_Model_Store::CACHE_TAG)        ));    }    /**     * 获取首页分类菜单数据     */    public function  getHomeMenu()    {        $storeId = Mage::app()->getStore()->getStoreId();// Gets the current store's id        $category_collection = Mage::getModel('catalog/category')->getCollection()            ->setStoreId($storeId)            ->addAttributeToSelect('name')            ->addAttributeToSelect('is_active');        $arr = array();        foreach ($category_collection as $key => $category) {            if ($category->getLevel() <= 1) {                continue;            }            $arr[$key]['level'] = $category->getLevel();            $arr[$key]['parent_id'] = $category->getParentId();            $arr[$key]['name'] = $category->getName();            $arr[$key]['id'] = $category->getId();            $arr[$key]['url'] = $category->getUrl();            $arr[$key]['is_active'] = $category->getIsActive();            $arr[$key]['position'] = $category->getPosition();        }        $arr2 = array();        foreach ($arr as $value) {            if ($value['level'] == 3) {                $arr2[] = $value;            }        }        foreach ($arr as $key => $value) {            foreach ($arr2 as $val) {                if ($value['id'] == $val['parent_id']) {                    $arr[$key]['children'][] = $val;                }            }        }        foreach ($arr as $k => $v) {            if ($v['parent_id'] != 2) {                unset($arr[$k]);            }        }        $all_category = $this->multi_array_sort($arr, 'position');//所有分类(分类下包含子分类)        return empty($all_category) ? false : $all_category;    }    /**     * 对二维数组按某个索引值排序     *     * @param $multi_array 二维数组     * @param $sort_key    索引值     * @param int $sort     * @return array|bool     */   private function multi_array_sort($multi_array, $sort_key, $sort = SORT_ASC)    {        if (is_array($multi_array)) {            foreach ($multi_array as $row_array) {                if (is_array($row_array)) {                    $key_array[] = $row_array[$sort_key];                } else {                    return false;                }            }        } else {            return false;        }        array_multisort($key_array, $sort, $multi_array);        return $multi_array;    }}

2.创建展示分类数据的模板文件 template\page\html\homemenu.phtml

<?php/** * Home menu for store * * @see Mage_Page_Block_Html_Homemenu */?><?php $all_category = $this->getHomeMenu() ?><?php if($all_category): ?>    <ul>        <?php $i=0;foreach($all_category as $key=>$item):?>            <?php if($i<=12):?>                <?php if ($item['is_active'] == 1): ?>                    <li>                        <a href="<?php echo $item['url'];?>"><?php echo $item['name'];?></a>                        <?php if (isset($item['children'])): ?>                            <div class="TabC">                                <div class="nav_zk">                                    <?php foreach ($item['children'] as $v): ?>                                        <?php if ($v['is_active'] == 1): ?>                                            <p><a href="<?php echo $v['url'];?>"><?php echo $v['name'];?></a></p>                                        <?php endif;?>                                    <?php endforeach;?>                                </div>                                <?php                                $BlockId = 'home_'.$item['id'];                                echo $this->getLayout()->createBlock('cms/block')->setBlockId($BlockId)->toHtml();                                ?>                            </div>                        <?php endif;?>                    </li>                <?php endif;?>            <?php  endif;?>            <?php $i++;endforeach;?>    </ul><?php endif ?>

3.布局文件 layout/page.xml

  <!--HomeMenu start-->            <block type="page/html_homemenu" name="homemenu" template="page/html/homemenu.phtml"/>            <!--HomeMenu start-->

4.最后在首页模板文件里调用

  <?php echo $this->getChildHtml('homemenu'); ?>


0 0