Joomla1.5系列组件开发教程_第1页
Joomla1.5系列组件开发教程_第2页
Joomla1.5系列组件开发教程_第3页
Joomla1.5系列组件开发教程_第4页
Joomla1.5系列组件开发教程_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.第一章 joomla!扩展开发:概况你以前开发过动态网站但你的朋友告诉你有关joomla!的事,所以你决定试一试。从美食网上那些著名的厨师中得到灵感后,你想建立一个简单的关于餐厅的网站。这个网站的安装比你期望要建立的内容管理系统要快速和平稳。当你找到一个精美的 模板并添加了一些菜单和一些内容后,你开始考虑增加一些新的特性可以给你带来更多的访问量,甚至是利润。之后,你安装了购物车来买书,一个论坛来收集意见和一些边栏广告。为什么扩展joomlajoomla!不但能够处理内容文章,而且允许你干净整合各种复杂的应用。开发者为joomla!开发各种扩展,如购物车、论坛、职位发布等。所有这些扩展能够运行

2、在单个数据库、模板和核心。我们开发出来的扩展,界面是完全统一的。当你正确地开发扩展后,你就不用登录数据库和做其他基本的配置。另外,你也可以分发你自己开发的扩展给别人与别人分享你的成果,不需要另外的编程和数据库操作。自定义 vs 扩展joomla!的代码是设计成可扩展的而不是直接修改它的核心代码。当有升级版本或者有补丁的时候,joomla!才会升级它本身的核心代码,而你的扩展是不会被覆盖的。精品.如何扩展joomlajoomla!支持三类扩展,每一类都有其特殊的用途。组件组件是最基本的,组件就是你所看到的页面的主要部分。joomla!的设计是为每个页面加载和运行一个组件。因此,joomla!核心

3、的内容管理功能本身也是一个组件(例如: com_content)。组件通常有强大的后台管理功能。后台通常用来创建和更新数据库记录。你也可以通过它允许网站管理员去上传图片或者视频文件。模块相对于组件而言,一个页面可以有很多的模块。模块一般由边栏的元素或者是内容菜单组成,模块显示组件的内容,但它们不是页面的主要内容。joomla! 也支持不需要编程的内容模块(例如: 自定义模块)。模块后台的控制是有限的,一般由一些基本的格式组成。精品.插件当网站需要插入一些代码来实现某些逻辑时,可以由插件实现(以前叫做 mambot)。插件一般用来格式化页面的组件或者模块的输出。例如有这样的组件,关键字高亮显示、

4、文章评论表单、基于javascript的html编辑器等。后台的控制与模块相似。主题概况创建工具栏和列表joomla!的后台提供了一套标准的工具栏按钮。它们使得界面可以保持一致的风格,所以使用者可以很快地熟悉相应的功能。如果有必要的话,这些按钮可以修改或添加。和标准的工具栏一样,数据库记录的列表也有统一的显示风格。这些列表通常会包括编辑单条记录的链接,改变发布状态的链接和提供自动分页功能。使用html函数来保持一致的风格和减少重复的代码在你的扩展里,有各种标准的 css 类名可以用来格式化内容和 html 元素。另外,joomla!包含很多函数可以自动生成复选框、下拉框和其他通用的元素。精品.

5、访问数据库和管理记录joomla!提供了一个公用的数据库对象,可以让每个页面的请求只适用一个连接。这个对象提供了一组函数用来查询数据和返回结果。这些函数是独立数据库的,他们被设计成支持一个数据库多套 joomla!。除了一个公用的数据库对象,joomla!还提供了标准的数据库表类。使用它核心的函数可以创建、读取、更新和删除记录。也可以添加这样的逻辑,当父记录被删除,其他表的子记录也会被删除。安全和获取请求变量的首选方法既然joomla!是一个公开的web 应用,有必要保护他免受攻击。joomla!提供了只有在框架里被调用的保险的脚本方法,也不会随便地执行。除非是未明的脚本行为,黑客能故意地提交

6、数据来访问你的数据库,joomla!提供了阻止这类攻击的功能。菜单项控制joomla!的一个显著的特性是导航与内容分离。然而,如果一个组件创建时没有考虑到这一点,网站管理员可能会不能选择他们的模板和模块。为了使用这个系统,有必要在产生连接时使用既定的菜单项id数字。组件的链接可以有多个选项,允许在前端显示不同的选择而不用手工去构建长长的url。精品.控制组件的逻辑流当某一个组件被加载时同一个文件被调用,但是执行不同的函数。joomla!使用标准的变量来决定每个请求要执行的函数。对于比较小的组件,可以用来从数据库和其它处理函数直接处理输出,比较大的组件会使用controller来处理逻辑流,用m

7、odel来处理数据访问,用views来控制输出。这样的约定使得维护代码更加容易和帮助组件以更可靠的方式执行。通过xml进行参数配置joomla!不是通过创建单独的表来处理扩展的配置信息,而是预留了一个字段来处理。变量通过扩展中的xml文件定义。xml文件也提供了默认值和约束这些参数。而且会自动地保存和返回这些值,而不需要手写查询语句。打包和分发一旦所有的代码都编写完成,就很容易打包给其他人使用的。所有文件的一个列表会被加入到xml文件中。任何需要建立数据表的查询语句也会包含在里面。所有文件被压缩成一个文件,然后这个扩展就可以被任何基于joomla!的网站安装和使用。第二章 组件开发入门在你编写

8、代码之前,有一些文件和文件夹需要创建和一些查询语句需要运行。你不但可以创建组件而且不用额外的配置就可以尝试不同的特性。你也可以看到joomla!组织和访问组件方法的概况。最后,你会像其它组件一样加入工具栏。joomla!组件的结构joomla!的所有组件都遵守指定的命名约定。每个系统组件都有唯一的名字,名字不要包括空格。代码分成两个文件夹,文件夹以com_开头,紧接着就是组件的名字。因此,你要创建两个相同名字的com_reviews文件夹,一个放到前台components下,另一个放到后台administrator/components 下。当组件被前台加载的时候,joomla!将会查找以组件

9、唯一命名并以 .php 扩展名结束的文件。在components/com_reviews 下建立review.php文件。同样,在后台建立的文件需要在前面加上 admin. ,在administrator/components/com_reviews 下建立 admin.reviews.php。 精品.执行组件joomla!前台所有的请求都经过根目录的 index.php 文件,加载不同的组件是通过设置 url get 的option 变量。假设你本地的joomla!站点地址是 http:/localhost/joomla/index.php,那么你加载的组件的地址应该是 http:/loca

10、lhost/joomla/index.php?option=reviews ,打开 reviews.php 文件并加入以下代码:?phpdefined( _jexec ) or die( restricted access );echo restaurant reviews;?你会看到类似的页面:精品.也许你可能想知道调用 defined() 函数的目的是什么,这是为了确保避免代码被直接通过 components/com_reviews/reviews.php 来访问。在后台的administrator/components/com_reviews/admin.reviews.php 文件加上

11、以下代码:前往: http:/localhost/joomla/administrator/index.php?option=com_reviews ,查看页面输出:精品.joomla!前后台的分离joomla! 的所有组件,它们的代码使得后台部分与前台部分的代码很好地分离,在某些情况下,例如数据库表类,后台会调用前台的某些文件,但它们是独立的。当你不让后台的函数混入前台的代码,那么安全性就加强了。这是后台和前台的结构相似的同时一个很重要的特性。以下显示了joomla! 的根目录和 administrator 文件夹展开的图表: 精品.要注意的是 administrator 文件夹与根目录有相

12、似的结构。区分二者是很重要的,否则你可能会将你的代码放错位置了而执行失败,除非是将它们放回正确的位置。 在数据库里注册你的组件你现在知道怎么样访问前台和后台的组件了吧,尽管每次你都能够通过手工输入 url 来执行你的代码,但你的用户是无法接受和你一样的通过手工输入 url 来执行你的代码的。如果你在数据库中注册了组件,即在components 数据表中加入一条记录,那么你就可以使用导航了。使用以下的 sql 语句来注册组件:insert into jos_components (name, link, admin_menu_link,admin_menu_alt, option, admin_

13、menu_img, params)values (restaurant reviews, option=com_reviews,option=com_reviews, manage reviews, com_reviews,js/themeoffice/component.png, );在 phpmyadmin 中,它看起来应该是这样的:精品.这里声明了组件的名称,可以包括空格和标点,可以指定前台和后台的链接,也可以指定后台组件菜单的图标。当你创建了基本的目录并加入了文件后,有的组件已经准备好被执行了,而不需要写任何的 sql 语句。这样你就在后台加入了组件的链接,也可以在前台适当的位置加入链

14、接而不需要硬编码 url。刷新你后台的页面,下拉组件菜单,你会看到你的组件的子菜单项中显示了你的组件名称:精品.既然组件已经注册了,现在可以创建前台导航菜单了。打开 “菜单” | “主菜单”,然后单击“新建”按钮,从该页面中选择“restaurant reviews”,输入链接名称后,如下图: 精品.点击“保存”,然后到前台刷新你的浏览器,在主要导航条上你应该看到 “reviews” 导航链接了,你看到大概是下面这样的:精品.从现在开始 ,你可以准备你的 php 技巧开始编写组件了。还要确保所有的前台请求都要通过 http:/localhost/joomla/index.php?option=

15、com_views,后台的请求通过 http:/localhost/joomla/administrator/index.php?option=com_reviews。joomla!是非常灵活的,可以让你做你喜欢做的事情。我们这个例子中,我们会教你重新创建一个组件,然后设计工具栏、用户、数据库类和库等,一旦你理解了它们的工作原理,这些元素将会让你节省下大量的时间。创建工具栏在joomla!的后台,所有的核心组件都实现相同的保存、删除、编辑和发布项目等按钮,你可以在你的组件中使用这些按钮以便管理员会有无缝的体验。首先,在administartor/components/com_reviews 文

16、件夹下创建 toolbar.reviews.html.php 文件,并输入以下代码:精品.包括输出代码的文件通常会组织成类,像这里的 toolbar_reviews。每个成员函数都会显示不同的工具栏。jtoolbarhelper 类包含了所有创建工具栏html元素的函数,你也可以加入自定义的html。你需弄要明白的是工具栏是由 html 表格构建的,比如你可能想在你的导航上加入 标签。工具栏现在被定义,但你需要加入一些代码来决定显示哪些按钮。joomla!会自动加载以组件名开始,以 .reviews.php 结束的文件。加入以下的代码到 administrator/components/com

17、_reviews 下的 toolbar.reviews.php 文件:这行包含 require_once(),使用 japplicationhelper 类的成员函数 getpath() 来获取 toolbar.reviews.php 文件的路径,而不用包括组件的名称,即使你改变了组件的名称,你不需要修改代码还是可以正常加载文件。精品.说明:也许你想知道为什么一开始就创建 toolbar.reviews.php 和 toolbar.reviews.html.php 这两个文件。组件开发人员首选的编码风格是让处理逻辑与输出完全分离,这样以后加入特性和与别人分享代码就非常容易了。toolbar.r

18、eviews.php 用输出类加载文件后,你需要要决定显示哪个工具栏。请求的变量 $task 会自动注册成为全局变量并用来导向组件的逻辑流。现在刷新后台的页面,进入 restaurant reviews 组件,然后你应该能看到以下的工具栏:精品.要查看其它的工具栏,在 url 后面加上 &task=add ,重新加载页面即可,你应该看到以下的工具栏: (休息一下,该分页了。再来一段广告。呵呵) 当用户要使用你的组件的时候,他们当然不想自己手动地在 url 后面添加 task 变量,那么他们怎么才能使用第二个工具栏呢?每个工具栏都对应着不同的 task ,当一个按钮被点击,相关的 task 就会

19、加入到表单中并自动提交。一旦合适的表单在合适的位置时,单击“新建”按钮会看到第二个工具栏,既然我们没有任何的表单在后台,这些工具栏按钮是不会工作的。下一章将会教你怎么让这些按钮生效。有效的工具栏按钮joomla!允许你使用自己的 task 和 label 覆盖任何按钮,分别传入第一个和第二个参数来覆盖。以下是 joomla! 标准版本提供的有效的按钮:精品.说明:如果你想创建像 joomla 核心按钮一样的自定义按钮,可以使用 jtoolbarhelper 的成员函数 custom() ,并传递 task、icon、mouse-over 图片和文本描述作为参数。第三章 后台开发精品.创建和管理

20、评论是我们组件的最重要的任务。我们会加入表单和数据库函数,然后就可以添加评论了。创建数据表在建立界面来输入评论前,我们需要创建评论的数据表:create table jos_reviews (id int(11) not null auto_increment,name varchar(255) not null,address varchar(255) not null,reservations varchar(31) not null,quicktake text not null,review text not null,notes text not null,smoking tinyi

21、nt(1) unsigned not null default 0,credit_cards varchar(255) not null,cuisine varchar(31) not null,avg_dinner_price tinyint(3) unsigned not null default 0,review_date datetime not null,published tinyint(1) unsigned not null default 0,primary key (id);精品.创建数据表类我们能够编写独立的函数来处理评论数据的添加、更新和删除。我想这些功能你一定不愿意重

22、复编写。幸运的是,joomla!团队已经为你做了。jtable 这个类提供了处理单个数据表的记录的创建、读取、更新和删除操作。要利用jtable,我们需要写一个指定到jos_reviews表的扩展。在administrator/components/com_reviews 文件夹下,创建一个tables文件夹,然后在里面创建 review.php 文件并输入一下代码:我们继承了 jtable 类,并加入数据表的所有字段作为类的成员变量,成员变量都初始化为null。然后覆盖类的构造函数 _construct() ,_construct() 会带有一个数据库对象为参数,并调用父类的构造函数,以数据

23、表名(以#_为前缀)、主键和数据库对象为参数值。精品.说明:为什么要使用 #_ 为数据表的前缀?在joomla!编写查询和定义 jtable 扩展时,使用 #_ 代替 jos_。joomla! 执行查询时会自动将 #_ 替换为 管理员选择的数据库前缀。这样的好处是可以在同一个数据库中运行多套joomla!。你随便修改数据库的前缀也不用修改代码。tablereview 类继承了 bing()、store()、load() 和 delete() 等函数,这四个函数可以让你不用写一行的sql 就可以管理数据库的记录。精品.创建评论表单精品.创建好了数据表,我们需要有一个友好的界面来增加评论。第一步,

24、让我们创建一个表单来输入数据,我们想从逻辑中分离html,配置表单的必要代码会写在 admin.reviews.php中,admin.reviews.html.php中则包含实际的html代码。打开admin.reivews.php,用以下的代码替换原来的内容: array(value = none taken, text = none taken), 1 = array(value = accepted, text = accepted), 2 = array(value = suggested, text = suggested), 3 = array(value = required, text = required),);$listsreservations = jhtml:_(select.genericlist, $reservat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论