散兵坑 迫击炮怎么用:深入认识Joomla! CMS:扩展、菜单及模板

来源:百度文库 编辑:中财网 时间:2024/05/01 16:37:49
深入认识Joomla! CMS:扩展、菜单及模板 作者:白建鹏    2007-06-19
第 1 页/共 2 页

本站虽已发表一篇《什么是Joomla!》,但那时我对Joomla!也只是初识,难以说得清楚。本站会员云海思源在论坛也曾提出希望讲解一下Joomla的常用术语。今天旧话重提,再谈谈Joomla的结构、术语等相关问题。

Joomla 安装结束后的根目录

 

Joomla的结构

上图是 Joomla 1.0.x 安装成功后的根目录内容。与Joomla的安装包相比,/installation 目录已经删除了。/configuration.php 这个文件是安装过程中生成的。

这是我从windows平台上的XAMPP服务器上截取的画面,因此文件都显示了windows风格的图标,很显然有很多php文件。没错,Joomla就是php语言编写的一个web程序。

再来看看Joomla 1.0.12英文原版的安装包,其根目录内容如下图所示:

Joomla 1.0.12 英文原版安装包

可以看出,安装前后几乎差不多。所以就有人想走捷径:论坛的某个帖子中说他将 /configuration.php-dist 文件修改为 /configuration.php 来安装Joomla,结果总是不能成功。很显然它对Joomla理解错了,希望存在这种想法的人看看《图解Joomla安装过程》。

看完了安装示范,你就发现一个问题:Joomla需要MySQL数据库的支持。没错,Joomla除了上图中你能看到的“文件”(Files)以外,还有你在web目录中看不到的“数据库”(Database)。也就是说,在安装过程中,有很多数据被写入了数据库,Joomla 依靠 web+db 的方式来运行。这与传统的静态网站把所有内容都保存在web空间是不同的。我想上面那位仁兄就是误把Joomla理解为静态网站了。错!Joomla是实实在在的动态网站(Dynamic website)。

怎样才能看到这些数据库内容呢?就像浏览文件需要“资源管理器”,查看数据库内容也需要相应的浏览器,那就是phpMyAdmin。当然,这不是唯一的,但是最常用的。一般来说,你购买php空间的虚拟主机时,商家会告诉你访问phpMyAdmin的URL及帐号,登录后就能看到这些数据库的内容。

在此劝告好奇心太强的新手:对于数据库尽量不要随便操作。一般来说,我们访问phpMyAdmin只做一件事:备份数据库。因此,你知道有这么回事就行了,不要经常打开数据库来查验它是否还在。

既然Joomla的网站由web+db组成,这就意味着,如果你要迁移某个Joomla建造的网站,你必须同时迁移这两部分。web内容可以通过FTP下载到你的电脑,或者通过JoomlaXplorer组件压缩打包后下载到本地;而db内容就需要用数据库备份工具来备份到你的个人电脑,这个工具通常都是phpMyAdmin。然后通过FTP将web内容上传到新空间的web目录(通常是一个名为www或者public_html的文件夹),而数据库内容又再次通过新空间的phpMyAdmin导入。当然,迁移网站后还需要修改/configuration.php文件中的某些环境参数。关于网站迁移我们以后专门撰文介绍。

继续看Joomla的根目录。/administrator 就是管理后台的路径。如果你的网站域名是 http://www.spinechina.org ,那么加上这个目录就是管理后台的路径,即 http://www.spinechina.org/administrator 。这也就引出一个安全隐患:每个人都很清楚Joomla的管理后台路径,而且Joomla登录时不需要输入验证码(CAPTCHA),居心不良的人使用穷举法就能暴力破解网站后台帐号——更何况Joomla默认的管理员用户名是 admin,人家只需要猜密码就行了。为了安全,我推荐你学习一下AutoIt发明的改变后台管理登录路径的方法。

/cache 是缓存目录。这里存储网站运行过程中的缓存文件,对于提高网站打开速度有帮助。

/components 是组件(component)目录。如果进入该目录,会看到所有子目录都是以 com_ 开头。这是Joomla的命令原则,com_ 就是组件的字头。所谓组件,我的理解就是完成一项重大任务、实现某个复杂功能的程序集。比如我们需要一个留言本,那么com_easybook 就是留言本组件。组件展示的位置是在模板的mainbody区域。组件可以在前台菜单上建立菜单项,点击该菜单项就打开了该组件的内容。例如,点击本站顶部菜单上的“留言”就能打开留言本。

可以这么理解组件:每个组件都有明确的功能定义,或者发布新闻;或者展示相册;或者列出会员上传的视频并允许点击播放;或者是一个论坛供众人激辩;……它往往实现很复杂的功能,前台展示结果允许分页显示,并且需要显示在mainbody这个区域作为页面的主要内容。

/help 目录——谁看谁明白啊。不过这个帮助简直是鸡肋,反正我从来没有用过。

/images 目录也是一看就明白。这里存放网站文章中所有插图。如果你要建立电子相册,那么图库软件使用的存储目录或许不在这里。

/includes 是一个重要的目录,里面都是Joomla运行所需的各种脚本、函数等等。可谓“机房重地,闲人莫进”。

/language 即网站语言目录。这里存放全站前台界面的语言包。例如我们要将英文版Joomla汉化,就必须把中文语言包保存到这个目录。相应的,后台界面的语言包就存放在 /administrator/language 目录里。

/mambots 即触发器目录。触发器(mambot)这个词还留有Joomla的前身mambo的影子,不过在Joomla 1.5 版本之后就改名叫插件(plugin)了。触发器是一种简单的程序,文件名一般以 bot_ 或者 mos_ 开头,少数使用 plugin_ 开头。一般来说只针对网页(content)启效。编辑器(editor)也被定义为触发器,不过这个触发器对于所有需要wysiwyg输入的页面,即使不属于content,例如添加友情链接时的站点说明,也能生效并显示输入窗口。只有当网页在浏览器中被打开时,触发器的功能才被“触发”。而且,多个触发器也遵守“依次触发”的顺序。举例来说,我们可以用 mosImage 这个触发器在文章中插入图片,然后需要 bot_multithumb 来将图片尺寸调整,生成缩略图。那么,就必须确保 bot_multithumb 的触发顺序在 mosImage 之后。设定方法是在网站后台的网站触发器列表中点击向上或向下箭头,调整触发器的顺序。

有很多触发器需要手动触发,即只有文章作者需要在该文中应用该触发器的效果时才使用,这时只要插入相应的“触发命令”即可。所谓“触发命令”实际上是该触发器的专用代码语法(syntax)。通常插入触发器需要用打括号{}将一句或者一段代码包含。当Joomla的网页在浏览器中打开时,就会自动将大括号识别为触发启动命令,然后去寻找是否存在对应的代码,如果存在就将该大括号内的代码替换为触发器的执行结果,如果不存在就直接以大括号来输出。

例如,plugin_jw_allvideos 这个触发器的功能是在文章中引用来自Youtube等视频网站的一个视频,而文章作者只需要插入一句代码而已,并不需要将视频文件保存在自己的网站空间;flickr4j_photo 这个触发器可以将Flickr.com免费电子相册网站的图片插入到你的文章中,你所需要做的也只是在文章中需要该图片的位置插入一句代码,而图片依然由Flickr.com替你免费保存。前台访客看到的是一个视频播放窗口,或者一幅美丽的图片,却看不到你插入的代码。如果文章中不需要视频,或者不需要引用Flickr.com的图片,那么就不需要手动插入那些代码,相应的触发器也就不会工作,最终访客在前台就看不到视频或者图片。

还有些触发器是组件自带的。这种触发器的功能就是将组件的某一部分内容插入到文章内容中。例如,我们可以通过quickdown这个触发器在文章中插入指向由Remository建造的下载栏目的某个下载文件;也可以通过mos_g2image这个触发器从整合的Gallery2图库中取出一张图片插入到网站文章中。如果没有这些触发器,完成这些工作就比较麻烦。当然,这些触发器也无法独立工作,必须同时安装有相应组件。

我们或许可以这样理解触发器:它是一种即时运行的小程序,由触发代码启动,效果作为网页/网站的一部分来展示。因此,触发器不能建立菜单项,它算得上是默默奉献的幕后英雄。

/media 目录顾名思义就是存放各种媒体文件的地方。当你的网站媒体文件不多,但又确实“有几个”的时候,可以将他们保存在这个目录,然后在文章中展示出来或者提供下载链接。实际上,这个目录管理的媒体有限,一些专门的媒体组件,如zOOm 允许使用指定的其他目录来管理媒体。

/modules 目录是存储模块(module)程序的地方,打开该目录,可以看到几乎所有文件名都以 mod_ 开头。Joomla的模块概念与其他web程序所说的模块稍有不同。这里的模块指可以将特定内容展示在前台mainbody之外的某个指定位置(position)的程序。由于mainbody是前台页面的中心,也是占面积最大的区域,因此模块在前台就是以一个小方块来显示。例如,我们可以在页面的左侧或者右侧,或者底部,通过 What is My IP 这个模块来显示访客的IP地址;我们也可以用OnBoom Flash MP3 Player这个模块在前台显示一个mp3歌曲播放器。

Joomla已经定义了十多个模块位置,如header、footer、left、right、debug、user1、advert2等等。在制作网站模板时,你可以自由分配这些模块位置的展示位置。比如,你可以将left显示在右侧,虽然有违常规,但是不算错。某个模块展示在前台的哪个位置,取决于你在后台设定它发布(publish)在哪个模块位置。例如,你将OnBoom Flash MP3 Player这个模块发布在left,那么网站左侧就多了一个播放器;如果你过几天想调整一下,登录到后台将它又改发布到right,那么前台的播放器就跑到右侧去了。在此过程中,你不需要理解或者编写任何代码,只需要点几下鼠标就行。

在一个模块位置上,可以发布多个模块。例如,左侧通常可以发布主菜单(mod_mainmenu)、登录窗口(mod_login)、新闻供稿(mod_rssfeed),右侧可以发布在线会员(mod_whosonline)、在线调查(mod_poll),而旗帜广告(mod_banners)则一般发布在顶部位置,可能是banner位置,也可能是header位置。对于发布在同一个位置的多个模块,管理员可以在后台调整展示顺序。

另外,还可以在后台设定模块发布到哪些页面。一个网站通常有很多页面,好几个栏目(组件),我们或许不希望在某些页面上展示某些模块。例如,安装了FireBoard论坛组件后,很多人希望点击菜单上的“论坛”打开的页面只有论坛界面,没有左侧或者右侧那些模块,这样论坛的内容就会占用整个屏幕窗口,显得比较大气。而在其他页面上却仍然需要显示左侧的登录窗口及右侧的Google Adsense广告等。那么,只需要在后台的模块列表中,将发布在left 和right的各个模块都一一打开,设定每个模块的发布页面中不要包含“论坛”这一页即可。这个设定不仅对论坛的首页有效,而且对于任何属于论坛的页面都有效,也就是说,即使你进入某个版块阅读帖子,或者点击“回复”按钮回帖,left和right位置都不会显示任何模块。

还有一些模块,它们只显示在后台,不在前台显示。例如,Preview Position 这个模块就是在后台工具栏增加一个“预览模板结构”的快捷方式,方便管理员快速查看网站模板中都有哪些模块位置,分别都布置在哪里。这些模块存放的位置相应的也转到了 /administrator/modules 目录里。相对于前台模块来说,后台模块的可发布位置比较少。一般快捷方式类的后台模块都是发布在 header 这个位置。

由此可以看出,模块一般展示的内容都比较简单,也不需要占用很大的面积,更不需要建立菜单上的链接。这样的程序都会被按照模块来编程。如果你的需求超过了这些,那么还是编写一个组件吧。

当然,某些组件还有配套模块。这是因为有时候需要将组件的某一部分内容显示在其他页面或者网站首页的周围区域,例如我们可能需要将RSgallery2图库的新增图片显示在网站首页,好让访客看到每天都增加了哪些图片;我们还可能需要将整合的SMF论坛的新帖展示在首页,以便访客迅速了解论坛的最新动向。这些模块的功能离不开相应的组件,但是它们也只是展示组件的一部分内容,并且需要发布在组件之外的位置。这样的功能就必须通过模块来完成。

根目录下的/globals.php文件也比较重要。Joomla的安全指南要求修改该文件中的一句代码。打开该文件,在大约第24行,可以看到:

 

define( 'RG_EMULATION', 1 );

将此处的1改为0即可。