2022年joomla组件开发 .pdf
《2022年joomla组件开发 .pdf》由会员分享,可在线阅读,更多相关《2022年joomla组件开发 .pdf(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Joomla 组件开发Joomla 中组件是最大的最复杂的扩展类型,可以被看为小型的应用。 如果把 Joomla比作操作系统, 组件就是一个个的桌面应用程序。每一个页面都调用一个组件生成页面的主体部分。比如,com_content组件处理所有跟内容相关的小应用,而注册组件处理所有跟注册相关的部分。一个组件包含管理部分和前台页面部分,前台页面部分是站点运行时正常生成的页面,管理部分是管理员的管理入口。我们以 Hello World 这个经典的例子,给出如何创建自己的组件。1. 怎样创建组件Hello WorldMVCComponent - frameJoomla 1.5的新框架为开发者解除了束缚
2、,代码彻底的修改和整理过了。本文给出了采用新框架的开发过程。我们将开发一个hello world 的组件,接下来的教程中,在这个简单框架的基础上将展现MVC 设计模式的力量。MVC模式尽管这个组件非常简单,可是随着添加新的功能或者自定义界面,代码可以非常复杂。MVC 就是数据表示和商业逻辑分开的软件设计模式,这样的前提就是商业逻辑在一起,而界面和用户交互能够被自定义或者修改而不会改变商业逻辑的程序。一个 MVC 自建有三个主要的部分, 这里做了简要说明, 更加详细的解释请看本教程给出的参考连接。ModelModel 封装了应用的数据,同时提供了管理和操作数据的功能。在例子中Model 包含了
3、add,remove和 update数据库中的 greeting信息,同时包含了从数据库返回greeting的 list. 通常来说数据的访问应该封装在 Model 中,这样假如系统从一个文件数据系统中迁移到一个数据库中,那么仅仅需要修改Model,而View 和 Controller 都不必修改。ViewView 是组件的一部分,用来以一种适合用户交互的方式来组织和展示数据。对于 web 应用, 通常 View就是 html 页面, View 从 Model 获得数据,并传递给模板。View 不做任何的数据修改,他仅仅是展示从 Model获得的数据。ControllerController
4、负责用户的操作,对于一个web 应用,一个用户的操作就是页面的请求,controller 根据请求决定调用合适 Model 并传递数据到 View 。Joomla!MVCJoomla实现了 MVC 模式,主要包括以下三个类JModel, JView,JController. 更详细的信息请参考API文档.下面我们就以具体的例子来展示Joomla的组件开发。创建组件对于这个简单的组件,只需5 个文件:hello.php - 组件的入口文件controller.php - Controller 基类,根据 task决定如何操作 Model 和 View名师资料总结 - - -精品资料欢迎下载 -
5、- - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 24 页 - - - - - - - - - views/hello/view.html.php - 返回数据,传递给模板views/hello/tmpl/default.php - 模板文件hello.xml - 组件安装文件创建入口文件Joomla!总是有一个单一的入口,比如对于站点应用是/index.php,而对于管理应用是/administrator/index.php,入口文件 根据 URL 或者 POST数据中 option 参数,来决定载入必要的组件。我们
6、开发的这个组件的入口: index.php?option=com_hello&view=hello这就会载入我们的主文件,也就是组件的入口文件components/com_hello/hello.php.以下的代码对于所有的组件是相当典型的:execute(JRequest:getVar(task) );/ Redirect if setby the controller$controller-redirect();?第一句声明是一个安全检查。JPATH_COMPONENT 是 Joomla定义的当前组件的绝对路径的常量, 对于这个组件是components/com_hello.DS 是系统目
7、录分隔符 :/ 或 ,由系统自动设置,从而开发者不必担心系统和版本的问题。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 24 页 - - - - - - - - - 在 controller 载入后,要检查是否有特别的controller 需要载入。本例中没有,但是我们保留以备后用。JRequest:getVar() 是获取 get 或 post的数据 . 如果 url:index.php?option=com_hello&controller=controller_n
8、ame,JRequest:getVar(controller)就可以返回 controller的名字;controller 命名规则是 ComponentnameControllerControllername创建了 controller 后, 就要执行任务, url: index.php?option=com_hello&task=sometask.如果没有指定task,那么就执行 display,这时 view 决定显示什么。controller 可以转向 , 比如保存任务完成后 . 最后一行程序就是监测转向.创建 Controller组件例子只有一个任务- greetthe world。
9、因此 controller 非常简单。不需要数据操作,所做的只是决定调用那个合适的 view。 我们只有一个方法display()。以下是源代码 :JController 构造函数注册display() 任务,除非用registerDefaultTask() 指定默认任务,否则dislpaly作为默认的任务。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 24 页 - - - - - - - - - 事实上这里调用 display 也不是必须的,因为 display 仅仅
10、是调用父类的display。 JController:display() 确定合适的 view 和模板,并且载入他们。例子组件中,我们只有一个view-hello,一个模板 default。view 的工作很简单,就是获取数据,用assignRef传递给模板。view 代码如下 :assignRef(greeting, $greeting);parent:display($tpl);?Joomla!模板使用用来以特定方式布置从view 获取数据的 php文件,在模板中可以用$this propertyname 获取 view 通过 assignref传递的数据。例子中模板非常简单,以下是代码:
11、greeting; ?打包 创建 hello.xml可以通过上传文件,然后修改数据表来安装组件。更有效的方式是创建一个安装包,让Joomlainstaller帮你做安装。这个安装文件包含以下内容:组件的基本信息要拷贝的文件执行安装和卸载的php文件.(刘注: 应该是 SQL 文件)语言包 (国际化用的 )sql 语句名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 24 页 - - - - - - - - - xml 文件格式如下 :Hello200702 22JohnDo
12、e john.doeexample.org http:/www.example.orgCopyright InfoLicenseInfoComponentVersion StringDescription of thecomponent.index.htmlhello.phpcontroller.phpviews/index.htmlviews/hello/index.htmlviews/hello/view.html.phpviews/hello/tmpl/index.htmlviews/hello/tmpl/default.phpHello World!subsubindex.htmlad
13、min.hello.php你可能注意到了文件index.html,文件主要是浏览目录的时候显示这个文件,而不是显示目录下的文件结构。这个文件仅仅包含一行:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 24 页 - - - - - - - - - 就是一个空白页面另外一个文件是admin.hello.php,这是管理组件的入口,目前我们没有这部分内容,所以他的内容和index.html 内容相同添加一个Model序言在上一文章中,我们做了一个Joomla 1.5 MVC
14、模式的 hello world 组件。在例子中, greeting 是直接写在 view 中的,这并不完全遵守MVC 的原则,按照 MVC 的要求, view 仅仅是展示数据而不是包含数据。现在,我们来展示如何将数据迁移到Model 中。接下来的例子中,你可以看到MVC 设计模式的强大和灵活性。创建 Model正如其名,Model 这个类是代表一些实体的。 例子中,这个 Model 代表 hello或者一个 greeting。Model的命名约定是component namneModelmodelname,我们的例子中就是HelloModelHello 。目前为止,hello model只有一
15、个行为,就是返回greeting。因此只有一个方法, getGreeting(),这个方法仅仅返回字串Hello, World! 。以下是 Model 的代码 :getModel();$greeting= $model-getGreeting();完整的 view 代码如下 :getModel();名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 24 页 - - - - - - - - - $greeting= $model-getGreeting();$this-ass
16、ignRef(greeting, $greeting);parent:display($tpl);?添加文件到安装包中。我们要做就是把这个hello.php 加入在 xml 相应部分models/hello.php新的 hello.xml 完整清单如下 :Hello200702 22JohnDoe john.doeexample.org http:/www.example.orgCopyright InfoLicenseInfoComponentVersion StringDescription of thecomponent.index.htmlhello.phpcontroller.php
17、views/index.htmlviews/hello/index.htmlviews/hello/view.html.phpviews/hello/tmpl/index.htmlviews/hello/tmpl/default.phpmodels/index.htmlmodels/hello.phpHello World!名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 24 页 - - - - - - - - - index.htmladmin.hello.phpJTa
18、ble数据库操作序言前两个例子展示了如何创建简单的MVC 组件,在第二个例子中View 获取从 Model 中返回的数据。本教程中,我们继续关注Model,我们将直接从数据库获得数据,而不是直接写在Model 中。我们将演示如何利用 JDatbase从数据库中取得数据取得数据第二个例子中只有一个方法getGreeting(),这个方法所做的仅仅是返回写在代码中的greeting。稍后将演示如何创建 sql 文件,并加入到 xml 安装文件中,从而在安装的时候自动创建数据表,加入初始的样板数据。现在我们将演示的是用什么代码替换就可以从数据库获得合适的数据。首先要获得数据库的引用,你这样做就可以得
19、到了$db=& JFactory:getDBO();JFactory 是一个静态类,通过它可以取得很多的实例(请参见源代码解析,JFactory类)。 getDBO 就是 getDataBaseObject 的缩写 , 很容易记住吧。接下来我们取回数据吧,这需要两步,一是存储query,一是载入结果。以下是getGreeting的代码:function getGreeting()$db =& JFactory:getDBO();$query = SELECT greetingFROM #_hello;$db-setQuery($query);$greeting= $db-loadResult(
20、);return $greeting;hello 是我们以后要创建的表名,greeting是存储数据的字段名。如果你不熟悉sql,最好找个教程手册速成一下,可以在 w3schools找到这样的教程。$db-loadResult()执行查询,返回结果集中第一行的第一个字段. .创建 sql 文件JoomlaInstaller 支持执行 sql,这些 sql 语句都保存在标准的文本文件中。在安装文件有三个语句, 一个如果表已经存在那么就删除,第二个是创建表,第三是插入样例数据。以下是全部文本:DROP TABLE IF EXISTS #_hello;CREATE TABLE #_hello (id
21、 int(11) NOT NULL auto_increment,greetingvarchar(25)NOT NULL,PRIMARY KEY(id) ENGINE=MyISAMAUTO_INCREMENT DEFAULT CHARSET=utf8;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 24 页 - - - - - - - - - INSERT INTO #_hello (greeting) VALUES (Hello, World!),(Bonjour, M
22、onde!),(Ciao, Mondo!);你可能看到了表的前缀非常奇怪。Joomla将替换这个前缀,用安装时候指定的内容。对于通常的安装,这个表名将是 jos_hello,这样可以多个安装使用一个数据库,并且能够避免表名冲突。表中有两个字段,一是 id,是主键,一是 greeting。以上内容保存在install.utf.sql。创建卸载 sql 文件尽管我们希望永远不必卸载组件,然而卸载也是重要的。Joomla将自动找到需要删除的文件和目录,可是必须要将删除表的sql 语句写在安装文件中。语句如下:DROP TABLE IF EXISTS #_hello;保存在 uninstall.utf
23、.sql 中.新的安装文件如下:Hello200702 22JohnDoe john.doeexample.org http:/www.example.orgCopyright InfoLicenseInfoComponentVersion StringDescription of the component.index.htmlhello.phpcontroller.phpviews/index.htmlviews/hello/index.htmlviews/hello/view.html.phpviews/hello/tmpl/index.htmlviews/hello/tmpl/defa
24、ult.phpmodels/hello.phpinstall.sql名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 24 页 - - - - - - - - - uninstall.sqlHello World!index.htmladmin.hello.phpinstall.sqluninstall.sql在 install 和 uninstall 部分, file 标签中指定了 charset和 driver,目前唯一合法的charset是 utf-8,如果想在非
25、utf8 数据库创建表,可以忽略这个属性。driver 属性目前只能是 mysql,将来 Joomla可能支持更多数据库。组件管理入口序言前三个例子我们开发了一个从数据库中获取数据的MVC 组件。 可是除了手工添加数据或者使用其他工具外,我们没有办法添加数据。本教程中,我们将开发一个管理部分从而能够管理数据。创建基本框架后台管理基本框架与前台站点部分基本相同。管理部分的主入口是admin.hello.php。这个文件与我们在前面部分使用的 hello.php 是一样的,除了 controller 改为 HellosController.默认的 controller 也是controller.p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年joomla组件开发 2022 joomla 组件 开发
限制150内