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

本文详细介绍了如何在电商平台上构建并展示首页分类菜单,包括菜单数据的获取、排序及模板实现,以及如何在首页模板中调用该功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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'); ?>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值