Joomla提供给我们功能强大的JTable抽象类,使用这个类我们可以进行一些数据库的基本功能操作。对于每个我们想要使用JTable类来操作的表,我们都需要创建一个JTable的子类。
当创建JTable子类的时候,我们需要遵循一些具体的约定或者规则。这些规则方便我们很容易的将我们自己的扩展集成到Joomla或者Joomla框架中。
假如我们创建一个组件,我们需要在该组件的后台管理目录(administrator/components/该组件目录)下的tables目录里创建一个JTable子类.类名就是数据库表实体名加上Table,而类文件的名称就是数据库表实体名。(如果还不清楚翻开他的核心组件比如com_contact自己仔细看
)
我们将使用我们之前教程中定义的表结构来演示我们是如何通过JTable类来连接数据库表的。在我们继续之前你得熟悉一下http://www.joomlar.cn/website/content/view/178/1/文章中介绍的数据库表结构
类名是TableFoobar,定位在
JPATH_COMPONENT_ADMINISTRATOR.DS.'tables'.DS.'foobar.php'文件中,DS这里是一个全局变量
替换了符号“/”,我们首先要做的就是在我们的类文件中定义公共属性或者说是公有变量,这些公共属性与数据库字段(field)直接相关,必须使用相同的
名字。我们使用这些公有变量作为一个缓冲区(buffer)来存储个别数据。(理解起来有点困难,可以这样理解数据库的数据会直接拿来填充这些公有变量,我们操作也是操作这些公有变量,如何影响到数据库是靠JTable一些内部的机制
)
第二件事情就是我们要定义一个构造函数,为了使用JTable::getInstance()方法,我们需要在我们的子类中使用一个单例引用的数据库对象来覆写基类的构造函数
第三件事情就是我们要覆写check()方法,该方法提供了对属性缓冲区的验证检查并返回一个布尔值结果,如果check()失败,我们就要调用setError()来设置一段消息来提示为什么验证检查失败了。
/** } } |
上面就是一个完整的JTable类文件,接下去我们要做什么,很明显我们要实例化这个对象,使用静态化方法JTable::getInstance(),完整代码如下:
JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.DS.'tables'); |
我们没有直接去包含一个文件,而是包含了整个tables目录,但JTable要去实例化TableFoobar对象的时候,如果类没有定义它就会从包含路径的所有文件中寻找名为foobar.php的文件
本节讲述JTable文件的构成使用,下节介绍CRUD自动化操作当然是基于JTable的。