深入认识Joomla! CMS:扩展、菜单及模板

本站虽已发表一篇《什么是Joomla!》,但那时我对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 英文原版安装包
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即可。

 



Joomla扩展的安装

以上提到的组件、模块和触发器,统称为Joomla的扩展(extension),因为他们扩展了Joomla的功能,单单一个原版Joomla能实现的功能很有限。不论是Joomla内核(安装包),还是其他扩展,或者Joomla的模板(template),下载后都是一个压缩格式。最常见是Zip格式,少数是tar.gz格式。请注意不要随意解压这些文件,除非有特殊指示需要解压。例如Joomla安装包需要解压到服务器才能开始安装,某些组件作者将组件及其配套模块、触发器一起打包,那么就需要解压后逐一安装,这种压缩包的文件名往往有 _unzip_1st 的字样,意为请先(1st同first)解压(unzip)。

由于Joomla可以自己在服务器端进行解压,因此我们安装扩展时直接指向zip格式的压缩包即可。安装都是在后台进行的。必须以(超级)管理员身份登录后台,点击顶部菜单上的“Installer”,弹出的菜单上有templates、components、modules、mambot等,分别对应安装模板、组件、模块和触发器。请注意不要点错了。点击之后就打开安装界面,第一个安装方法就是通过“浏览”按钮找到压缩包,然后点击“Upload File & Install”按钮自动安装。

对于较大的组件,比如VirtueMart网上商店组件达到了1MB多,这样上传恐怕很耗时间,那么就可以通过FTP上传到服务器端,然后借助JoomlaXplorer或者unzip.php工具解压到服务器端某个临时目录,再通过安装页面的第二个方法,即输入解压后的文件所在目录路径,然后点击“Install”进行安装。

有时候会发生安装了一半就出错,再次刷新页面进行安装时却发现提示“xxxx文件夹已存在”。这是因为前面那个半途而废的安装过程已经创建了同名目录。这时,必须通过JoomlaXplorer或者FTP手动将该文件夹删除。注意:如果是组件,一般会在两个地方创建目录,一个是 /components ,一个是 /administrtator/components,前者功能是管理前台界面,后者是该组件的后台设置页面。

有时候会发生安装某个压缩包时提示没有找到 .xml 文件。这个 .xml 文件就是安装命令文件。里面详细记录了某个程序文件应该安装到哪里。发生这种情况时,我估计该扩展或者模板作者忘记包含.xml文件的可能性很小。一般都是因为打包时多压缩了一层文件夹,而Joomla只在压缩包的根目录及第一层目录下寻找 .xml 文件。

DocMan的安装包结构
DocMan的安装包结构

如上图所示,这时DocMan 下载组件的安装包内容。可以看出,在压缩包第一层,只有一个 1.3.x 文件夹,进入该文件夹才能看到 docman.xml 这个安装命令。假如某人解压后自己打包时又多了一层目录,如 /docman/1.3.x ,那么这样的压缩包在安装时就会出错。解决方法也很简单:将该压缩包解压,重新打包,确保 .xml 文件在压缩包的根目录或者第一层目录下。

Joomla的菜单

几乎每一个网站都有菜单(menu)。菜单的存在主要是为了内容导航(navigation),以免访客找不到网站结构,转晕了。当然,菜单同时也有利于网站的人性化服务,据专家计算,如果访客在网站找到他想要的目标内容需要点击鼠标超过3次,那么该网站就不够合理。当然,现在某些下载网站要求访客一次又一次点击广告才能看到下载链接的做法已经超出了“合理”的范畴,那应该是RPWT。

在传统静态网站,建立菜单比较费劲,但是其本质比较简单——一个指向目标页面的链接(Link)而已。在Joomla世界,菜单仍然是一个链接,但是Joomla的术语称之为“菜单项(目)”(menu item)。用户得到的实惠是,在Joomla中建立菜单更容易。我们几乎不需要记忆目标页面的URL,也不需要手动编辑 <a> 链接标记。

登录到网站后台,就可以看到在顶部菜单上有一个menu,这就是“菜单管理器”。里面默认列出了mainmenu、topmenu、usermenu和othermenu四个菜单。每一个菜单实际上对应一个模块,你在后台的模块列表中应该能看到相应的模块名称。这是因为菜单的功能用模块就能做到。

点击菜单管理器中的某个菜单名称,就打开了其内容。每一个菜单上,都列有若干菜单项。如果要隐藏某个菜单项,只需要在该菜单项名称前面的方框中点击选中,然后点击顶部工具栏右侧的“unpublish”(取消发布),该菜单项就从前台消失了,但仍然存在于后台。假如你以后不会再有需要该菜单项显示,那么可以在选中之后直接点击“Delete”(删除)按钮将其删除。当然,你还可以调整各个菜单项的显示顺序。

最令新人痛苦的就是“创建”菜单项。点击工具栏上的“New”按钮之后,出现的“菜单类型”页面有十多个选项,一时不知道应该怎样选择。我简单解释一下:如果你将要新建的菜单项是指向某个组件,那么就选择“component”作为类型;如果是指向某个静态页面,就是“Link - static content”;如果是指向某个明确的URL,就可以选择“Link - Url”;如果是指向嵌入模式运行的页面,就选择“Wrapper”;如果是指向网页内容的单元或者类别,就选择对应的section或者category。“Submit - Content”这个类型比较独特,它的功能是在前台显示一个允许访客提交文章的页面,可以自行撰写,当Joomla安装后,默认的“Submit News”菜单项就是这个类型。“Separator / Placeholder”这个类型更特殊,它不产生任何链接,仅仅是为了插入一个分隔符,如 | 这个符号,或者占位符,比如多级菜单的第一级我们不希望它被点击,就可以设置为这种类型。

 

Joomla的模板

Joomla从一诞生就决定使用内容与外观分离的模式来建造网站。这也是web 2.0的定义之一。这样有利于随时更换不同风格的外观,就如同人类换衣服,而内容不受影响——不管你西装革履还是长袍短褂,内核不会改变,从而功能也不受影响。

一般来说,如果把网站的前台页面用隐形的线划分为一个“井”字形,那么left在左,right在右,header在上,footer在下,而中间那一块最大的面积,就是mainbody。这就是为什么要实现复杂的功能,比如建造一个阿里巴巴那样的B2B黄页,或者淘宝那样的C2C卖场,就必须编写成组件而不是模块,因为组件的内容展示在mainbody区域。

如果你希望自己的网站看起来鲜艳夺目,或者结构美观,或者光怪陆离,甚至每一页都不同,那么你尽管放心,完全能做到。只不过,这与Joomla的内核无关。这纯属模板设计范围。

对于新手来说,尤其是不懂平面设计、不懂CSS的新手来说,想要建造一个漂亮的网站几乎是不可能的。然而几乎每个新手安装完Joomla的第一件事就是:我希望我的网站是这样、这样、这样的外观。

所谓内行看门道,外行看热闹,普通群众评价一个网站的优劣主要是外观,其次是内容,再其次是服务。可见不仅人的脸蛋很重要,网站的脸面也不能马虎。当然了,不可能每个人都是设计高手。所以才有了RocketTheme、JoomlArt这样的专业模板设计公司,他们的模板卖的非常不错,当然价格也不菲。如果你自己不懂设计又想用到漂亮的模板,我建议你下载免费的Joomla模板。免费模板中也有很多精品,我们又何必苦苦去寻找商业模板的破解呢?

Joomla的模板安装与扩展安装差不多,详细介绍见《Joomla模板的安装及更换模板后中文乱码的解决》

还有许多内容,无法在此一一解释。我想,最有效的认识途径就是亲自尝试一下。Joomla新手如果担心损坏网站,那么可以在个人电脑上搭建一个本地服务器来尝试新东西。正如本站会员heye2003在论坛说的那样:很多东西都得靠实践+搜索。有些人总是像小马过河一样,宁可在Joomla 的QQ群里面“千万次的问”,却不肯迈出一步去亲自尝试一下。


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页