深入理解Magento-第九章-修改、扩展、重写Magento代码作为一个开发者的你,肯定要修改Magento代码去适应你的业务需求,但是在很多时候我们不希望修改Magento的核心代码,这里有很多原因,例如将来还希望升级Magento、还想使用更多的Magento代码。如果你正在寻找修改Magento代码的最佳方式,那么此篇文章将会是一个不错的教程。适合对象:高级开发者适合目标:开发者希望自定义修改Magento当前版本:Magentoversions:1.4.0.1作者:精东最后修改时间:2010年7月13日版本:V0.3.0重写Magento模块(Module)第一步,你需要创建属于你自己代码的命名空间,例如Wemvc,App等,为了方便与大家分享代码,我将空间命名为App。app/code/core/community/local/App/假如你现在打算修改Mage/Catalog/Block/Breadcrumbs.php这个文件,你可以在你的命名空间,App里添加一个新的模块“Catalog”。接下来创建块(Block)目录,并复制Breadcrumbs.php到你的新目录中。这里还需要你创建一个config.xml配置文件。app/code/core/community/local/App/Catalog/Block/Breadcrumbs.phpetc/config.xml修改Breadcrumbs.php的类名为App_Catalog_Block_Breadcrumbs,并继承原类名Mage_Catalog_Block_Breadcrumbs。现在,你需要激活你的新模块,这样magento才能够知道你的新模块。创建文件app/etc/modules/App_All.xml,添加如下代码。
truelocal下面我们需要一个特殊的标签来复写掉Breadcrumbs,下面我们通过模块的配置文件来实现。重写Magento区块(Blocks)编辑文件“app/code/local/App/Catalog/etc/config.xml”
0.1.0App_Catalog_Block_Breadcrumbs我们需要添加一个“blocks”标签,或者在已经存在的“blocks”标签中添加内容。然后在模块名后面添加rewrite标签,在这个例子中模块名是“catalog”。然后我们看“breadcrumbs”标签,这个标签帮助magento找到我们我们想修改的块。在我们的列子中,breadcrumbs是Magento核心代码中的类名:app/code/core/Mage/Catalog/Block/Breadcrumbs.php。如果你有更多的目录层级,可以用下滑线来分隔。例如:
App_Catalog_Block_Category_View在这个例子中,我们重写了app/code/core/Mage/Catalog/Block/Category/View.php。在breadcrumbs标签中的值是你的类名,这样Magento就可以获取你的类,因为类名与你的目录名一致。用过zendframework的人都知道,自动加载autoloader这个东西,它会跟你类名中的下滑线去你的目录中需要对应的类文件。记住一点,下滑线代表下一级别的文件夹,如果你的类名与你的文件目录名不一致,那么Magento根本不会理睬你。举例来说:App_Catalog_Block_Breadcrumbs→/app/code/local/App/Catalog/Block/Breadcrumbs.phpApp_Catalog_Block_Category_View→/app/code/local/App/Catalog/Block/Category/View.php重写Magento控制器(Controller)-正则表达式匹配式重写Magento控制器我们我们以重写购物车为例。1、首先在App下创建新的模块,依次创建如下文件:/app/code/local/App/Shopping/app/code/local/App/Shopping/etc/app/code/local/App/Shopping/etc/config.xml/app/code/local/App/Shopping/controllers/app/code/local/App/Shopping/controllers/CartController.php2、编辑/app/code/local/App/Shopping/etc/config.xml文件,加入如下代码:
0.1.0