掌握joomla1.5的框架及扩展开发导读系列(三)

   请求和响应

    请求到响应这个处理过程Joomla是怎样处理的呢?

    joomla有个统一的入口地址。

    先进很多框架都采用了这种设计方式,举个简单的例子,这个你有客人要来拜访你的那么,你家有几个入口呢,你可以留正门,后门、侧门、旁门,甚至天窗让客人 走呀,这个当然不是一个明智的选择,假如你还需要放看门狗的话,可想而知,每个门还得放上一条,虽然你很有钱(很多有钱人都是这么干的),但是从管理上而 言,可以不是一个好办法。那么好吧,我再加上一层只有一个门的围墙,所有拜访我的人都得走这个门,放上一条该死的狗,加上一个引导系统可以引导客人走向不 同的门,当然这个引导系统得让客人感觉到方便,能够自动识别客人的身份,会飞走天窗。这样安全和方便全部解决。

   joomla的框架会处理这个问题,不用我们干涉。反正下面一大堆图我都看不到了,跳过吧。

 

   URI结构

   其实joomla的入口就只有一个Index.php,而问好后面的一大串东东成为query data了,由joomla本身解析处理,zend framework的uri以/分开的成为干净的uri,让人看了很舒服,不过joomla可没有这么做,它采用传统的东西。

   index.php?option=com_example这个option是组件的名称,指明由那个组件进行处理。

   nav 菜单那里的链接都是指向各个组件的。

   事实上,joomla还有一个重要的query字符。Itemid,这个指明的唯一的页面。

   而feed则是指明由哪种格式输出。

   重要的task指明要进行何种操作,比如edit,add,delete,只要你指定了option,那么加上task,它就会component中执行 这个操作,当然你还需要一个额外的参数。

   joomla的保留uri的query字符有下面这些,你命名自己的uri时候要避免的。保留字有这些:

   format 、hidemainmenu(后台采用)、Itemid、layout 、limit 、limitstart 、no_html、option 、start 、task 、tmpl 、tp 、vars 、view 。

   在我们想输出一个链接的时候,有一个推荐方法Jroute::_('index.php?option=com_example'),那么我们就不需要时 刻去注意给uri加上Itemid了(没有Itemid这个指定,你的component的输出可就真的成了不确定因素了),而且用这个还有有助seo优 化。

 

   库

   joomla是有非常有用的库的,导入库中的东西你只需用一条类似java中import的命令:jimport,加上一个类地址。

   应该是只有在库目录下的文件才能够使用这个命令的。

   路径从libraries下一层开始,使用 .  隔开。而且jimport也是支持导入所有包中类的,因为它是支持*这个字符的。

   其中pattemplate是joomla使用模板引擎,用的其他的开源的引擎,joomla真是无所不用。

 

   出于兼容性的考虑,joomla还是依然采用的是php4的语法。这个当然让我阅读起来很不爽,只要你确定你用的东西是跑在php5的服务器上,那么用 php5,用新的东西还是好的,这句话不全对,起码是部分正确的。

Share
Posted in joomla at February 4th, 2010. No Comments.

joomla 多model应用

    今天很不幸的要用joomla的多model,而且是在view,其实在controller里面操作model是比较多的,一般view中也只是取数据 显示而已,而joomla的view是可以用到同名的model的,但是刚好这个组件的view是比较多的,为之前一个view写的model也适用新写 的view。一般的方法是从controller哪里setModel,但是如果路由不经过controller,那就会报错,这些可就让我不爽了,为什 么就不给view提供getModel呢。

    joined在http://forum.joomla.org/viewtopic.php?f=304&t=316802这 个论坛提供他一个写法:

You can add multiple models to a view. For example you can add multiple models, for example within the controller: Code: $model = $this->getModel ( 'person' ); $view  = $this->getView  ( 'person '  ); $view->setModel( $model, true );  // true is for the default model; $company = $this->getModel ( 'company'' ); $company->_name = 'model_company'; $view->setModel( $company ); Within the view: Code: $person = $this->get('person' ); $company = $this->get('company, 'model_company');

 

   感觉很费事,绕过controller的时候会出错的。所以直接require进来,new了一个直接操作,哪个方法方便就用那个,本人的一贯风格。

Share
Posted in joomla at February 4th, 2010. No Comments.

掌握joomla1.5的框架及扩展开发导读系列(二)

JSite and JAdministrator

 

 这一次是介绍Joomla的一些个几本概念啦,不过我可以不是全职翻译,有些地方还是觉得用英文好点,英文的文档真的看起来还是比较舒服的。但是 由于我比较穷,买不起书,网上这个影印版在图上又不是很清晰,看得朦朦胧胧的,雾里看花。什么时候才能成为一个真正的买得起书的程序员呢。哎哎。安慰自 己,穷的有骨气的程序员。虽然我用盗版,但是用得理直气壮。就这样,活下去。

 

    在joomla中两个重要处理请求的全局对象,前台方面有的有JSite,后台有JAdministrator,这个两个对象都是扩展 JApplication,JApplication是一个抽象类,所谓抽象类,指的是不能实例化的类,一般我们会用到这个东西都是利用 JFactory::getApplication()来返回一个Application,可不能直接new一个。当然JSite和 JAdministrator是差不多相似的东西。指的是函数的类似。

 

   有处理请求的全局对象,当然就有处理相应的东东,在js中document用得很熟悉了吧,那么Joomla也有这么一个东西来缓冲响应的。 当然分为很多的document,有HTML,PDF、RAW、feed、还有error,HTML document是用来生成(在这里我想用渲染这个词,感觉顺口)一个XHML页面的。其他的类似,跳跳。

   document就相当一个缓冲池,里面的东西并还没有发送出去,如果想修改可以再取出来修改的,比如多加一个js文件到头信息,当然要在 Applicaition的生命期内呢(俺的理解就是想加就加,加不了用其它办法)。

   Japplication这个东西是一个全局对象,所以我们可以在任何的地方拿到呢。

   通过一个简单的声明语句就可以了。

  

global $mainframe;

   当然有前面的方法也是没有错的。个人爱好。

   document的获得就只有一种方法了,

  

$document = & JFactory::getDocument();

   菜鸟必懂,前面的&这个符号是一个引用符号,于是document指向唯一的全局对象,不产生一个副本,实际上不写这个可以符号这句话也不会出 错,只不过你对document的修改不起作用而已,呵呵。谨记,有些对象只需要一份就可以了,单例模式,如果这个都不懂,没有关系,因为本博客全面面向 菜鸟,做中国第一的菜鸟博客(做牛人博客做不来,本人太水了)。

    下一节讲的是网站的一个必懂知识点

Share
Posted in joomla at February 4th, 2010. No Comments.

掌握joomla1.5的框架及扩展开发导读系列(一)

一、开发准备

 

   市面上的关于这一方面开发的书籍还是比较少,找遍了整个网络终于让我找到了一本,写点学习笔记吧,检主要的说,跳过次要的东东。

    开发环境的要求:

    1.Mysql3.23

    2.PHP4.3

    书上是这么写的,但是一般我的环境是有多新就配多新,用新的准没错,错也是服务器的问题,谁叫他们不兼容的,管他呢。

    之后还介绍了两个开发集成环境xampp,这个东东不错,开发者的最爱,JSAS,这个就不知道是什么东东了,enables us to quickly set up multiple joomla ,看来我的开发不需要,跳过先。

    joomla 有多种扩展方法。

    一、组件扩展,模块扩展,插件扩展(components,modules,plusins)。

    二、当然joomla的多语言,和模板支持也是很强大的,但不在我的开发范围之内喔,书上也可能不会花费太多时间讲到。

    三、工具包,这个不是重点。

    joomla一个牛逼的功能就是组件可以方便的安装和卸载,你可以把joomla看成一个操作系统,想用什么东西就安装什么,比windows好用一点, 其实什么系统都比windows好用。鄙视收费的东西。

    组件安装需要一个xml的描述文件,以后在介绍,不过这个东西是很重要的吧。

 

二、组件介绍  

 

    组件扩展可能是最常用的东东,实际上很多时候modules的功能都可以用组件来代替,只不过程序员没事干,自己造造词语,当然这个本来也是为了本类便于 分类管理啦。

    组件开发的输出一般就是显示在主要内容部分,就是显示在正文,一个页面的主要部分就用这个东西来写就得了,组件输出的数据可以作为feeds,pdf,还 有原始文件。简直是无所不能。

 

三、模块介绍

 

   模块一般是只读模块,侧边栏的内容就用它了

 

四、插件

 

    插件大部分是消息驱动的,joomla提供了全局的dispatcher,不知道是否和as3消息机制有得一拼,当然是指易用性方面的。组件可以使用自己 开发的插件,可能使用查询组件的时候需要用到查询插件。

 

     下面介绍的是多语言和模板简介还有工具箱,用到了再介绍吧

     顺便提下,工具包是不安装在joomla中的,前面提到JSAS就属于这么一个东西。  

 

五、扩展管理   

 

    这个东西相当于windows中控制面板中的添加和卸载程序。

   joomla有提供第三方扩展软件的地方,称为JED(joomla!Extension Directory)

 

六、开发工具   

 

   有J!Code和J!Dump,地址如下

   http://joomlacode.org/gf/project/jcode

   http://joomlacode.org/gf/project/jdump

   实际我并没有用这个东西,调试直接用var_dump了,呵呵,简单的东西还是好用些吧。个人习惯

Share
Posted in joomla at February 4th, 2010. No Comments.