分享

定制Magento模板

 顾于思文摘馆 2014-11-15
模板定制有两个原则:

1.修改现有的模板文件。
2. 扩展新的模板文件

显然,第一种方式是不推荐的,扩展现有的模板使你的程序更加模块化。

下面讨论的方式都是基于第二种原则。扩展模板的基本思路是在合适的地方改变http请求的入口。如:
请求 http://mangeto_server/catalog/category/view/id/6
执行过程如下:
引用
1). 分析URL中的catalog: Magento遍历app/code下所有模块etc/config.xml文件中的如下定义
config/frontend/routers/*/args/frontName标签值为catalog对应的模块名字,定位到相应的目录,对于该例子找到module为Mage_Catalog
2). 分析URL中的category: 定位到app/code/Mage/Catalog/controllers/CategoryController.php
3). 分析URL中的view: 定位到CategoryController.php中的viewAction方法。后面的id/6则是该方法的参数。
4). viewAction方法执行完,一般就是去寻找
config/frontend/layout/updates/*/file/的值所指向的布局文件,这里是:catalog.xml
5). 定位到app/design/frontend/default/default/layout/catalog.xml, 在该文件中查找catalog_category_view标签,找不到自动定位到catalog_category_default. 根据该标签里的Block定义分别调用相应目录下的模板文件。



通常我们有三个阶段改变网页入口:
1. 改变目标url,结果改变了controller入口,于是可以重新定义模块及其相应的controller类。
2. 重写(rewrite) Block入口类:适合定制Block和Template的情况。
3. 改变模板:如果仅仅需要改变Block指向的Template文件的情况下使用

从使用频繁度来讲,三种方法的顺序为:3,2,1
I. 下面首先来介绍最常用的第三种定制方法:仅仅改变模板文件
仍然以上面的例子为例:
1. 建立自己的模块,如Joymami_Catalogue, 相应的Layout文件为catalogue.xml,在该文件中加入如下的代码:
Xml代码  收藏代码
  1. <catalog_category_default>  
  2.     <remove name="category.products" />  
  3.     <reference name="content">  
  4.         <block type="catalog/category_view" name="joymami_category.products" template="catalogue/category/series.phtml">  
  5.         </block>  
  6.     </reference>  
  7. </catalog_category_default>  


上面的代码将和Mage_Core内置的catalog_category_default定义共同对该页面请求生效。但是上面的代码由于使用了
<remove name="category.products" />

则移除了原来Block Type为catalog/category_view(对应的名字为category.products)的定义。然后重新定义了Type为 catalog/category_view的Block的Template属性指向,为了使新定义的Block生效,请注意:name属性必须不能和原 来的名字category.products不一样,这里为joymami_category.products

2. 在template目录下建立catalogue/category/series.phtml文件,里面定义自己的html显示。

重新运行
http://mangeto_server/catalog/category/view/id/6

看看是否发生了变化:)

II.重写(rewrite) Block入口类
这种定制使用的情况是:如果你想在模板文件中输出更多的动态数据,而原来的Block类不足以提供这些数据,那么就需要重写(rewrite)这 个 Block类,在Block类中用API改变(相对于layout文件配置改变)Template文件指向。请看另一篇帖子对这种方法的解释

III.改变原来的入口 重写(rewrite) Block入口类
严格说,这种方法不是本文讨论的范畴,因为改变了入口,意味着你抛弃了原来的一切(Controller,Model,Template), 是全新的Module.请看本论坛内如何定制Module的文章

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多