创建Joomla组件之TABLE
如何创建一个MVC模式的Joomla组件教程(八) 使用数据库 上
序言
前两个例子展示了如何创建简单的MVC组件,在第二个例子中view获取从model中返回的数据。本教程中,我们继续关注model,我们将直接从数据库获得数据,而不是直接写在model中。我们将演示如何利用JDatbase从数据库中取得数据
取得数据
第二个例子中只有一个方法getGreeting(),这个方法所做的仅仅是返回写在代码中的greeting.
稍后将演示如何创建sql文件,并加入到xml安装文件中,从而在安装的时候自动创建数据表,加入初始的样板数据。现在我们将演示的是用什么代码替换就可以从数据库获得合适的数据。
首先要获得数据库的引用,你这样做就可以了得到了
$db =& JFactory::getDBO();
JFactory 是一个静态类,通过它可以取得很多的实例(请参见源代码解析,JFactory类).
getDBO就是 get DataBase Object 的缩写, 很容易记住吧
接下来我们取回数据吧,这需要两步,一是存储query,一是载入结果
以下是getGreeting的代码
function getGreeting()
{
$db =& JFactory::getDBO();
$query = ‘SELECT greeting FROM #__hello’;
$db->setQuery( $query );
$greeting = $db->loadResult();
return $greeting;
}
hello是我们以后要创建的表名,greeting是存储数据的字段名。如果你不熟悉sql,最好找个教程手册速成一下,可以在w3schools找到这样的教程。
$db->loadResult()执行查询,返回结果集中第一行的第一个字段. .
创建sql文件
joomla installer支持执行sql,这些sql语句都保存在标准的文本文件中。在安装文件有三个语句,一个如果表已经存在那么就删除,第二个是创建表,第三是插入样例数据。
以下是全部文本:
DROP TABLE IF EXISTS `#__hello`;
CREATE TABLE `#__hello` (
`id` int(11) NOT NULL auto_increment,
`greeting` varchar(25) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT DEFAULT CHARSET=utf8;
INSERT INTO `#__hello` (`greeting`) VALUES (‘Hello, World!’),
(‘Bonjour, Monde!’),
(‘Ciao, Mondo!’);
如何创建一个MVC模式的Joomla组件教程(九) 使用数据库下
你可能看到了表的前缀非常奇怪。Joomla将替换这个前缀,用安装时候指定的内容。对于通常的安装,这个表名将是jos_hello,这样可以多个安装使用一个数据库,并且能够避免表名冲突。
表中有两个字段,一是id,是主键,一是greeting.
以上内容保存在 install.utf.sql.
创建卸载sql文件
尽管我们希望永远不必卸载组件,然而卸载也是重要的。Joomla将自动找到需要删除的文件和目录,可是必须要将删除表的sql语句写在安装文件中。语句如下:
DROP TABLE IF EXISTS `#__hello`;
保存在 uninstall.utf.sql中.
新的安装文件如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<!DOCTYPE install SYSTEM “http://dev.joomla.org/xml/1.5/component-install.dtd”>
<install type=”component” version=”1.5.0″>
<name>Hello</name>
<!– The following elements are optional and free of formatting conttraints –>
<creationDate>2007 02 22</creationDate>
<author>John Doe</author>
<authorEmail> john.doe@example.org</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!– The version string is recorded in the components table –>
<version>Component Version String</version>
<!– The description is optional and defaults to the name –>
<description>Description of the component …</description>
<!– Site Main File Copy Section –>
<files folder=”site”>
<filename>index.html</filename>
<filename>hello.php</filename>
<filename>controller.php</filename>
<filename>views/index.html</filename>
<filename>views/hello/index.html</filename>
<filename>views/hello/view.html.php</filename>
<filename>views/hello/tmpl/index.html</filename>
<filename>views/hello/tmpl/default.php</filename>
<filename>models/hello.php</filename>
</files>
<install>
<sql>
<file charset=”utf8″ driver=”mysql”>install.sql</file>
</sql>
</install>
<uninstall>
<sql>
<file charset=”utf8″ driver=”mysql”>uninstall.sql</file>
</sql>
</uninstall>
<administration>
<!– Administration Menu Section –>
<menu>Hello World!</menu>
<!– Administration Main File Copy Section –>
<!– Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /admin/ in the package –>
<files folder=”admin”>
<!– Site Main File Copy Section –>
<filename>index.html</filename>
<filename>admin.hello.php</filename>
<filename>install.sql</filename>
<filename>uninstall.sql</filename>
</files>
</administration>
</install>
在 install和uninstall部分,file标签中指定了charset和driver,目前唯一合法的charset是utf-8,如果想在非 utf8数据库创建表,可以忽略这个属性。driver属性目前只能是mysql,将来Joomla可能支持更多数据库。