体验Joomla2.5,从joomla1.5说起

摘要:
体验Joomla 2.51.5至2.5,以及1.6和1.7版本。事实上,这两个版本都是过渡版本,这表明1.5和2.5有多么不同。新发布的美德玛特2可以支持2.5。虽然在使用上没有区别,但内核是一个翻天覆地的变化。第二个版本完全用Joomla标准重写。似乎美德玛特团队已经被Joomla 2.5所说服,不再从事英雄主义。这是一个好的开始。它表明Joomla 2.5提供的环境并不弱,因此不需要构建两层框架。

搞了joomla1.5二次开发一年多,已经算是对joomla非常了解了,joomla1.5总体来说还是不错的,不过系统自身还是有不少的缺点,我一一列举一下:

1. 文章组件层次

当你建一篇文章,要么不属于任何分类,要么需要选一个分类,而且这个分类必需要属于一个单元,也就是文章的层次性是:单元/分类,也就是二级分类。不过很多时候,只有两个级别是不够的,更复杂的内容需要三级或以上层次。Joomla的确有很多插件,但没有一个可以直接扩展文章组件的功能,因为这是系统限制,文章组件没有对向提供很多接口。所以这个问题只有用第三方CCK(内容管理工具)组件来取代默认的文章组件。但这就让系统变得很奇怪,文章组件是CMS系统中最重要的元素,现在却要用第三方取代,而且还不能把文章组件删除,这让很多使用者感到不爽

2. 文章不能关联一张图片

也是文章组件的问题。虽然文章正文可以插入图片,但文章不能关联图片。这很多地方需要用到的,例如有缩略图片展示的文章列表,纯文字的列表会显得很枯燥,所以文章列表带图片是很正常的。这可以安装News Show Pro GK4或者使用第三方CCK组件。

3. 固定的用户分组

Joomla1.5有固定的分组,甚至是对每个分组所拥有的权限分配得比较细,但分组是不能编辑的权限也不能调整。所以很多组件可能会直接忽略其权限特性,不让非管理员身份的人去管理组件。这就非常受限了,例如站的内容多了,站长老大想请几个录入人员来管理部分的内容,这都很难以实现。

4. SEF URL,搜索友好的链接

这个的确没办法,joomla天生的URL格式是index.php?option=com_content,而drupal的原地址格式是index.php?/node/1。可以想象把一堆GET参数转为短地址格式有多麻烦。这种SEF URL的实现原理是系统先分析短地址,通过程序运算或者数据库对比匹配,才得到真实的地址。所以如果要调整短地址的格式,你需要编辑router.php,来改写匹配规则。使用joomla的人大多数不会写代码,所以大部分人会选择第三方SEF组件,例如sh404sef,它的匹配原理就是数据库记录匹配。

但也由于Joomla1.5缺乏接口的关系,一些内容结构的改动或者是错误的链接,都可能让这些SEF组件判断错误而产生坏链接。这个问题非常头痛,试想想客户只是把文章从一个分类改到另一个分类,文章就无固不能访问。又或者某文章有个坏链接,就把其它好链接破坏了。客户只有天天找你说事,认为你做的系统稳定性不行。

5. API弱爆了

程序员当然想系统的API越丰富越好,自己可以做少很多事情。但joomla就有这样的不好,你在自带组件能看到的,全部都有API,但你没看到的,就别认为它会给你API,joomla的API就够自己用而已。

例如组件很常用的API是图片缩放功能,都没有一个统一的API提供,这使得所有图片管理组件只能各自实现自己的图片缩放功能,管理体验非常不统一。更有些比较大型的组件,例如VirtueMart、Mosets Tree、Community Builder等,都在joomla层上再建一层框架,框架上的框架!你们看不起Joomla都不用那么吊吧?不过有时候看这些大型组件的架构,貌似真的比joomla要好,怪不得那么吊。技高人胆大,今天不是你joomla有点名气,这些老大都不用寄你的篱下,身在你家,还是不服你的规矩。

可这些都苦了我们程序员,试想想一个系统,几个框架,你用大型组件还要学习它的结构,它的语言包、模板放的位置可能都不一样。

6. Joomla1.5官方很快就停止更新了,现在新组件也很少考虑1.5的,组件会越来越少。

体验Joomla2.5

1.5到2.5之间,经历过1.6, 1.7两个版本,其实中间两个都是过渡版,这说明了1.5与2.5的差异是多么的大。1.6到2.5的组件几乎都可以安装在2.5上,1.5的组件就完全不能装到2.5上(不过对于实力团队,他们做的组件一般可以在1.5到2.5成功安装,但这中间加了多少兼容层,真的不计其数)。

很多人看2.5跟1.5没什么分别,又因为2.5组件不比1.5多,所以很多新人都被人劝了去搞1.5了。我喜欢新鲜事物,把赌注都压在2.5上,来了解这个系统的差异。

我现在所能了解的优点如下:

1. 无限级分类

如果新版本还不是无限级分类,我真的要放弃joomla了,这种改进是理所当然的。

2. 文章组件可以带图片

文章组件更人性化了,可调整的地方比较多,也可以上传列表缩略图与正文大图。基本上会改点模板的话,那些新闻列表组件可以不用装。

3. 可编辑用户分组

分组可以自由编辑了,对于开发对权限管理有深度要求的网站更得心应手。而且joomla2.5提供了权限相关的API,要实现组件的权限功能只需要添加一个XML文件就可以。

4. API丰富了不少

在1.5要做一个后台组件,你真的需要抄不少代码,因为就连Joomla最基础的操作功能,joomla都没有把代码封装好,很多成员方法需要写,但因为代码太多,抄都容易抄错。2.5提供了几个管理功能封装类,传统的管理功能只需要model和controller去继承那些类就可以实现大部分效果。并且有我很喜欢的jimage类,缩略功能不用再带第三方库了。

5. JForm

JForm是个新概念,它可以让你的表单基于一个XML文件来架构,方便了编辑功能的制作,而且也允许扩展field,自己做了什么很炫的field,以后可以直接复用,十分容易管理。

6. 实力团队开始守规矩了

VirtueMart 1.1.9是个非常稳定的版本,但只可以装在1.5上。而新发布的VirtueMart2可以支持2.5,虽然使用上没什么分别,但内核却是翻天复地的变化,第二版本完全用joomla标准重写,好像是VirtueMart团队已经折服于joomla2.5了,不再搞英雄主义。这是个好的开始,说明joomla2.5所提供的环境并不弱,不必自己再建二层框架。

PS:以上是我最近对joomla2.5研究的一些心得总结,我使用joomla2.5还不算太久

免责声明:文章转载自《体验Joomla2.5,从joomla1.5说起》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Cannot find module '@babel/core'使用sql语句创建修改SQL Server标识列(即自动增长列)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ODOO 新API修饰符

Odoo8中,API接口分为traditaional style和record style两种类型: traditional style指的就是我们在7.0中使用的类型,def(self,cr,uid,ids,context)式的语法. record style 8.0及以后版本精简化参数后的风格,只保留了self和args,形如def(self,args...

Hadoop是什么

Hadoop原来是Apache Lucene下的一个子项目,它最初是从Nutch项目中分离出来的专门负责分布式存储以及分布式运算的项目。简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台。下面列举hadoop主要的一些特点: 扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。 成本低(Econ...

Windows平台Python编程必会模块之pywin32

在Windows平台上,从原来使用C/C++编写原生EXE程序,到使用Python编写一些常用脚本程序,成熟的模块的使用使得编程效率大大提高了。 不过,python模块虽多,也不可能满足开发者的所有需求。而且,模块为了便于使用,通常都封装过度,有些功能无法灵活使用,必须直接调用Windows API来实现。 要完成这一目标,有两种办法,一种是使用C编写Py...

Spark官方文档翻译(一)~Overview

Spark官方文档翻译,有问题请及时指正,谢谢。 Overview页 http://spark.apache.org/docs/latest/index.html Spark概述 Apache Spark 是一个快速的,分布式集群计算系统.它提供了高等级的针对 Java, Scala, Python and R的API接口, 他还是一个优秀的图处理引...

使用百度翻译的API接口

http://api.fanyi.baidu.com/api/trans/product/desktop 这是申请的接口地址,会得到一个APPID和一个钥密 然后下载PHP的对应的代码  有一个PHP文件,把这两个静态变量的值改一下就可以用了   用的话,只要使用一下这个方法就OK了,$from是要翻译的语言类型,中国当然是中文 $to是要翻译成什么语...

Abp的swagger UI 出现Failed to load API definition.

Abp 出现Failed to load API definition.如下图: 原因:本次出现的原因是Api里面的方法重名了(只是方法的参数不一样)(可能是controller中的auction上面少了(hettpget,httpdelete)属性,其它原因也可能引起) 解决方法:修改其中一个方法的名字...