magento - 改写tag/product controller

 magento的最新版本已经是1.6了.当然相对于1.5来说在性能上没有太多的改进,不过修正了不少BUG.同时也添加了不少新的模块,如果担心性能,没用的模块可以关闭掉.归入正题.

近日,发现google收录了不少magento网站的站内搜索结果页.类似

catalogsearch/result/index/?q=  站内搜索页面

tag/product/list/tagId/1/  标签产品列表页

 

这样的页面是用户行为产生的,对搜索引擎来讲,一来表明这个站有更新,二来它是用户数据,应该说是比较有一定质量的吧.但是在社区的版本中,这两类用户数据产生的页面除了有设置标题之外,没有设置meta_keyword,meta_description,这样在google看来,站内存在了具有重复的页面.而且URL也显得不是那么友好.如何改进呢.标题和meta_description好办.当然不能直接修改代码.只要把需要修改的block复制到local code pool修改就可以.但是修改url时,要修改magento的tag模块的product controller类.比如

 

要把tag/product/list/tagId/1/  修改成

tag/product/list/tagName/black/这样的格式的话

如何override magento的tag模块下的product 这个controller呢?

step 1: 创建如下目录结构

magento模块

 

step 2: 创建模块的config.xml文件,

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Company_Tag>
            <version>0.1.0</version>
        </Company_Tag>
    </modules>
    <frontend>
        <routers>
            <tag>
                <args>
                    <modules>
                        <Company_Tag before="Mage_Tag">Company_Tag</Company_Tag>
                    </modules>
                </args>
            </tag>
        </routers>
    </frontend>
</config>


Step 3,  向magento注册新模块,在app/etc/modules/上下创建Company_All.xml文件(注,文件名不限,不过为了区别和可读性,请按一定规则)

 

<?xml version="1.0"?>
<config>
    <modules>
        <Company_Tag>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Tag/>
            </depends>
        </Company_Tag>
    </modules>
</config>


Step 4, 清空缓存看是否在magento后台有看到注册的新模块

Step 5, 确认一切正常后,开始进入到关键的代码阶段了,复制一下原来的magento tag模块的ProductController类的代码文件到新建模块对应的目录下:

即: Mage/Tag/controllers/ProductController.php ----> Company/Tag/controllers/ProductController.php 并做相应修改,代码如下:

<?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 [email protected] 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_Tag
 * @copyright   Copyright (c) 2011 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

/**
 * Tagged products controller
 *
 * @category   Mage
 * @package    Mage_Tag
 * @author      Xinhao Zheng <[email protected]>
 */
require_once 'Mage/Tag/controllers/ProductController.php';
class Company_Tag_ProductController extends Mage_Tag_ProductController
{
    public function listAction()
    {
        $tagId = $this->getRequest()->getParam('tagId');
        if (!empty($tagId)) {
            $tag = Mage::getModel('tag/tag')->load($tagId);
        } else {
	        $tagName = $this->getRequest()->getParam('tagName');
	        $tag = Mage::getModel('tag/tag')->loadByName($tagName)->load();
        }
        if(!$tag->getId() || !$tag->isAvailableInStore()) {
            $this->_forward('404');
            return;
        }
        Mage::register('current_tag', $tag);

        $this->loadLayout();
        $this->_initLayoutMessages('checkout/session');
        $this->_initLayoutMessages('tag/session');
        $this->renderLayout();
    }
}

Step 6: 这样controller的修改就算完成了.也是比早期的版本简单多了.不过这里的修改只是实现了它可以财时处理tag/product/list/tagId/1/ 和tag/product/list/tagName/black这样的页面,还需要修改相应的block,模板文件以及layout来做调整.比较简单,就不再做复述了.

进一步,应该要实现下面这样的,应该已经有模块实现了,不过可以用来做练习:

 

catalogsearch/result/index/?q=keyword&p=N&limit ---> catalogsearch/keyword_pageNumber_limit.html

tag/product/list/tagId/1/  ----> tag/tagname_pageNumber_limit.html

 


发布了247 篇原创文章 · 获赞 3 · 访问量 71万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章