Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1293119
  • 博文数量: 315
  • 博客积分: 10397
  • 博客等级: 上将
  • 技术积分: 3731
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 21:21
文章分类

全部博文(315)

文章存档

2015年(10)

2014年(3)

2013年(2)

2012年(8)

2011年(8)

2010年(29)

2009年(59)

2008年(77)

2007年(119)

分类: 系统运维

2009-11-05 12:47:34

模板定制有两个原则:

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

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

下面讨论的方式都是基于第二种原则。扩展模板的基本思路是在合适的地方改变http请求的入口。如:
请求
执行过程如下:

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,在该文件中加入如下的代码:

代码:
   
       
       
           
           

       

   

上面的代码将和Mage_Core内置的catalog_category_default定义共同对该页面请求生效。但是上面的代码由于使用了

代码:
       

则移除了原来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显示。

重新运行

看看是否发生了变化:)

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

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

阅读(1209) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~