Archive for May, 2008

Joomla后记

这两天又重拾Joomla,有了一些新的心得:

从UI设计者的角度,页面是根据布局划分的,如header, footer, left, right, main等.这些元素构成了teamplate里的position.
从程序开发者的角度,页面是根据功能划分的,如导航栏(nav),文章列表(list),广告区(banner),投票(poll)等.这些元素构成了module.
因此,在joomla里程序开发者编写的功能模块(module)要显示在页面上,只需要通过指定module放在template的哪一个position就可以了.这样来看,以前不解的地方变得合理起来了.

———————————————-

Joomla的设计应用了MVC模式,创建一个新的module,需要编写一个helper.php实现数据获得部分(Model),mod_**.php实现主调用(Control),通常数据习惯放在名为$list的变量里.tmpl/default.php实现界面显示部分(View).

———————————————-

每个页面只能有一个组件,每个组件的views目录下对应组件可产生的页面模块文件,有点像asp.net的用户控件中的.ascx文件,也是前台UI界面,但UI设计者在模板设计时不能修改模块的界面.

可以这么理解,joomla的页面功能由组件实现,比如新闻列表和新闻内容,由com_content这个组件提供views/section和view/article来实现,为了丰富每个页面,可以将module拼装在页面上,因此,通常将登陆框,导航栏这种需要在多个页面中被复用的功能做成module,如果将来程序开发者希望对某个组件的功能进行扩展,那么可以编写插件,如为新闻内容的显示界面添加tag显示,那么就可以编写一个content的插件放在plugins/content/目录下.

———————————————-

1.先将网站按功能划分,如用户信息方面的/内容方面的(如新闻)/投票方面的/友情链接方面的等,形成不同的component定义.
2.然后针对每个功能提出不同的功能视图,即该功能的不同表现形式(组织形式,这里指数据的组织形式,而非显示样式,显示样式由模板来决定),如内容的列表显示及内容的Detail显示等,形成每个component的view定义.
3.接着每个component按MVC模型进行组建,编写共同的controller及不同的model和view.
4.组件实现并安装后,需要在网站上提供一个调用组件的入口,如在第一个组件com_content的某个视图中提供一个链接地址(通常这种入口链接会以模块的方式组装在组件页面上,如导航栏模块)来调用新组件.
5.如果组件的视图需要被多个页面调用的,像一个独立的box一样,那么就要创建成module而不是component view,举例:内容方面的功能创建了一个组件com_content,但有一个需求是列出前5条高点击率新闻,并且在多个页面中都需要显示它,此时就要创建成module.
6.创建成module的好处是,这个功能模块将可以被复用并组装到任意页面,典型的如footer, poll等.一个页面可以使用多个模块,这使用页面变得灵活并且更丰富.
7.另外,在设计组件时要考虑组件功能的扩展,提供一些接口可以使得新的idea在组件Release之后还能够通过插件的方式将其加入到组件功能中去,如com_content组件提供了onAfterDisplayContent接口,使得它的插件可以向该事务注册新的观察者调用.(这段的理解不一定对,比如组件的接口如何暴露出来?)

Comments (19)