你现在的位置:首页 > PHP网站建设知识库 > Drupal > 正文

Drupal 节点数据库挂钩

数据库中的 node 和 node_revisions 表包含系统中存储的信息段的大多数相关信息,比如标题、摘要、主体、创建者和创建时间。这个系统可以保存节点的许多修订,而不会影响性能或可伸缩性。在编写新的节点模块时,通常要将一个或多个新表添加到数据库中。在系统中创建和修改新节点的内容时,数据库挂钩允许模块创建、修改和删除表中的数据。

Drupal 有一个数据库抽象层,其中包含几个函数,它们将高层 Drupal 数据库 API 链接到 MySQL 或 PostgreSQL 的低层 PHP 数据库模块 API。通过为数据库实现数据库抽象 API,实现了跨数据库兼容性。

但是,需要考虑一个非常重要的 问题:要想创建真正跨数据库兼容的模块,就必须非常小心地编写 SQL,这些 SQL 必须在所有数据库平台上都能够工作。Drupal 还没有提供处理这些兼容性问题的系统或机制。

<module_name>_load
load 挂钩允许模块从数据库中额外的表中装载与此类型节点相关的任何额外信息。返回值是一个对象,其中包含要添加的额外属性。Drupal 会自动地将它们与正在装载的节点合并。例如,代码可能像 清单 4 中这样。
清单 4. load 挂钩的示例实现

function <module_name>_load($node) { $additions = db_fetch_object(db_query('SELECT * FROM {<module_name>} WHERE nid = %s', $node->nid)); return $additions; }
系统会自动地将 $additions 合并到装载节点的结果中。

<module_name>_insert
insert 挂钩通知模块将节点的数据添加到数据库中。通常,这会调用数据库抽象层中的一个函数(例如,db_query),从而将节点的相关数据插入为这个模块定义的表中。存储在 node 数据库表中的标准数据(比如主体、创建日期等等)是自动地写入数据库的。
<module_name>_update
update 挂钩使模块能够更新数据库中现有节点的数据。如果要支持模块的节点修订,update 挂钩也是最常见的实现所需代码的位置。
<module_name>_delete
delete 挂钩允许模块在从数据库中删除节点时执行额外的操作。在这时,可以清空模块特有的任何表。