Joomla!之门 arrow 文章新闻 arrow Joomla! 1.5 专栏 arrow 修改 Joomla! 1.5 的 HTML 输出而不动核心文件
Narrow screen resolution Wide screen resolution default color green color orange color

Google Translate

EnglishFrenchGermanItalianJapanesePortugueseRussian

文章分类阅读

修改 Joomla! 1.5 的 HTML 输出而不动核心文件

E-mail
(18 次投票)
作者: 白建鹏   
2008-08-11

这个问题的提出源自本站会员 szyyw08 在论坛的一个问题,简单来说就是:如何自定义组件的前台风格(原帖子中提到的“首页”应该理解为 com_content 组件的 frontpage 视图)?在 Joomla! 1.0 时代,AutoIt 介绍了一种方法可以完美解决这个问题。

现在到了 Joomla! 1.5 平台,前面这个方法不灵了。不过,Joomla! 开发团队早就给出了更好的方案,总结起来就是3个字母:MVC。

MVC in php Programming
MVC in php Programming

MVC 等几个概念

MVC 是Model-View-Controller (模型-视图-控制器)的缩写。这是 Joomla! 1.5 采纳的一种新型的 Web 程序编写模式。MVC 这三个字同时也蕴含了一种理念:更加灵活的外观设计。其中的 V 字母就是完美解决外观布局问题的答案。

长期以来,Joomla! 就因为其外观布局无法自由设计而遭诟病。现在,得益于MVC的帮助,彻底控制网页外观风格的力量重新回到了模板设计人员的手中。

首先弄清楚两个概念:CSS 只能改变页面“样式”,例如颜色、字体、背景等等,它不能改变“布局”,也就是页面上各种组成部分的结构。这是由 HTML 的输出来控制的,例如文章展示为博客形式还是列表形式,就无法通过 CSS 来调整。以前如果要改变页面的布局,就必须手动修改Joomla! 核心文件的 HTML 代码。这样会引发一个潜在风险:当你网站核心升级时,新的文件可能会覆盖掉旧版本,从而使你的 Hack 结果消失。而 MVC 的出现,使得这个烦恼一去不复返。设计人员再也不需要修改 Joomla! 的核心文件了,也不必担心网站升级会抹杀个性化设计。

我们姑且称 MVC 中的 View 为“视图”,扩展套件在前台呈现各种不同类型数据的方式就是它的视图。但是它的外观表现不止一种,我们称之为不同的“布局”。举例来说,com_content 这个组件控制着文章系统,它能够呈现不同的数据:文章,或者类别,或者单元。前台形式可以是单篇文章展示,可以是多篇文章的标题列表,可以是多篇文章的 Blog 形式排列。这就是说,com_content 组件的视图有多种布局。也就是说,真正在前台展示的是布局。

那么,我们如果要改变前台的 HTML 输出,就只需修改布局。在进行这个操作之前,我们必须记住:一个组件可以有多种视图,每个视图又可以有多种布局。视图包含了一系列固定的信息,而布局可以通过不同的形式来展示这些信息。例如:文章组件(com_content)的“类别”视图包含很多文章,这些文章可以用列表来显示,也可以用表格来显示(可能还有其它形式),这就是说,类别视图既有“列表”这种布局,也有“表格”这种布局。

模块就相对简单多了。模块一般都是以一种方式展示一种信息。因此模块没有视图,它们只有布局。有些模块作者甚至可以在后台参数中为他的模块提供几种布局来供选择。例如:登录模块的“姓名”和“密码”输入框是垂直排列,还是水平排列,这就无法通过 CSS 来实现,只能是不同的“布局”。

模板与布局

接下来还要区分一下“模板”与“布局”的关系。模板主要是为网页设定一个结构框架。在这个框架之内,指定了组件和模块的显示位置。而在这些位置上,具体如何展示信息,是由布局(模块)或者视图与布局的组合(组件)来决定的。

Frontpage Template Positions of Joomla! 1.5
Frontpage Template Positions of Joomla! 1.5

 

上图是 Joomla! 默认模板 rhuk_milkyway 的结构外观(通过访问 http://域名/index.php?tp=1 就能看到这些模块位置)。你可以清楚地看到哪些模块在哪个位置,以及组件在什么位置输出。然而,“实际上”这些位置将来输出什么内容,不是模板决定的,而是由“布局”决定的。



 

评论  

 
0 #13 謝謝分享此文blackhole2783 2009-04-12 14:12

喔~抱歉~看到第二頁時~就先發 言了~
原來參考連結發佈在第三頁 XD
發了篇廢文~真不好意思~
謝謝分享此文
 
 
0 #12 能否附上原文網址blackhole2783 2009-04-12 14:04
請問這是翻譯的嗎?
如果可以,能否附上原文網址,
很多名詞的翻譯,都不大明白它原 文指的對象是哪一個
希望有原文可看
 
 
0 #11 受益匪浅呀fudesheng2008 2008-11-01 11:12
这篇文章对我这个新手来说太棒, 一下子解决了我困惑好久的问题, 但是白大哥,我还是不懂的怎么修 改里面的代码,比如我想插入一个 globenews 模块,如果您能再写篇文章作为补 充,那就更完美了。非常感谢。
www.superha.com
 
 
0 #10 回味再三yooyooh 2008-10-07 21:30
这篇文章看了三遍,每次感觉都不 一样,现在是都明白了。这才是真 正的精品文章,值得newbie 们再三体会。
 
 
0 #9 谢谢老白eblise 2008-09-04 11:26
太好了,虽然看的似是而非,但经 过自己动手试验,再结合文章解释 的方法,我终于把联系人模块给改 到居中对齐了,哈哈
太好了,谢谢老白,这篇文章真是 帮了大忙了
 
 
0 #8 没关系白建鹏 2008-09-04 10:47
没有关系,你总有自己能够掌握的 那部分知识。其他不能理解的部分 交给其他人去处理吧。

这个方法其实我也不会操作。但是 翻译过来可以供模板设计人员来借 鉴——他们当然能看懂。
 
 
0 #7 感谢支持!白建鹏 2008-09-04 10:45
感谢你的支持!

希望多在论坛回帖帮助新手,这样 我就有更多时间撰写更多教程了。
 
 
0 #6 只能明白20%eblise 2008-09-04 10:05
对我来说,真的难以理解........囧!!
 
 
0 #5 thanks a lot北北 2008-08-16 20:18
希望这样的中文教程多写一些,对 我们这些新手来说,实在是精华文 章啊
 
 
0 #4 感谢提醒!白建鹏 2008-08-15 00:22
感谢提醒!第二页的混乱状况已经 修正,原来是粘贴代码时没有处理 好。

现在好了。
 
< 上一篇   下一篇 >