You are here

把数据存储到数据库表中(3)

老葛的Drupal培训班 Think in Drupal

在第一次启用注释模块时,drupal会查找文件annotate.install并运行函数annotate_install(),它将读取我们在模式钩子中所描述的模式。我们描述了我们想让Drupal创建的数据库表及其字段,而Drupal将它们转化为了我们当前所用数据库的标准SQL。这方面的更多信息,可参看第5章。如果一切顺利的话,这样就创建了数据库表。让我们这就尝试一下。由于我们在前面还不带数据库表的时候,就启用了该模块,所以我们需要重新安装这个模块,它现在多了一个.install文件。需要按照以下步骤进行重装:
1. 导航到“管理➤站点构建 ➤模块”,先将这个模块禁用。
2.在管理界面“管理➤站点构建 ➤模块”上,找到卸载标签,然后将模块卸载掉。这样Drupal就会删除与这个模块有关的数据库表。
3. 启用该模块。这次,在模块被启用时,Drupal将创建相关的数据库表。
 
 
提示:如果在你的.install文件中不小心包含了一个错别字,或者由于其它原因导致执行失败,那么导航到“管理➤站点构建 ➤模块”来禁用你的模块,并使用卸载标签来卸载模块的数据库表,这样drupal就能完整地删除你的模块和它的数据库表了。如果前面的办法无效的话,那么还有最后的手段,那就是在数据库的system表中直接删除该模块的记录。
 

Drupal版本:

评论

我按照上面的过程 制作了Annotate模块 在模块列表中可以显示出,但是点击后只是刷新一下网页,并没有出现复选框和表单的界面,还有在把数据储存到数据库表中时,我看到另外的代码也不知道那是正确,代码如下:

  <?php
// $Id$
function annotate_install() {
drupal_set_message(t('Beginning installation of annotate module.'));

switch ($GLOBALS['db_type']) {
case 'mysql':
case 'mysqli':
db_query("CREATE TABLE annotations (
uid int NOT NULL default 0,
nid int NOT NULL default 0,
note longtext NOT NULL,
timestamp int NOT NULL default 0,
PRIMARY KEY (uid, nid)
) /*!40100 DEFAULT CHARACTER SET utf8 */;"
);
$success = TRUE;
break;
case 'pgsql':

db_query("CREATE TABLE annotations (
uid int NOT NULL DEFAULT 0,
nid int NOT NULL DEFAULT 0,
note text NOT NULL,
timestamp int NOT NULL DEFAULT 0,
PRIMARY KEY (uid, nid)
);"
);
$success = TRUE;

break;
default:
drupal_set_message(t('Unsupported database.'));
}
if ($success) {
drupal_set_message(t('The module installed tables successfully.'));
}
else {
drupal_set_message(t('The installation of the annotate module
was unsuccessful.'),'error');
}
}

求证 那种写法是更准确呢?谢谢!